xref: /freebsd/tools/regression/sockets/unix_socket/unix_socket.c (revision b14427e250266bc2a7594a9e27f372e3b97de509)
1  /*-
2   * Copyright (c) 2006 Robert N. M. Watson
3   * All rights reserved.
4   *
5   * Redistribution and use in source and binary forms, with or without
6   * modification, are permitted provided that the following conditions
7   * are met:
8   * 1. Redistributions of source code must retain the above copyright
9   *    notice, this list of conditions and the following disclaimer.
10   * 2. Redistributions in binary form must reproduce the above copyright
11   *    notice, this list of conditions and the following disclaimer in the
12   *    documentation and/or other materials provided with the distribution.
13   *
14   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17   * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24   * SUCH DAMAGE.
25   *
26   * $FreeBSD$
27   */
28  
29  /*
30   * Simple UNIX domain socket regression test: create and tear down various
31   * supported and unsupported socket types.
32   */
33  
34  #include <sys/types.h>
35  #include <sys/socket.h>
36  #include <sys/un.h>
37  
38  #include <err.h>
39  #include <errno.h>
40  #include <unistd.h>
41  
42  int
43  main(void)
44  {
45  	int sock, socks[2];
46  
47  	sock = socket(PF_LOCAL, SOCK_STREAM, 0);
48  	if (sock < 0)
49  		err(-1, "socket(PF_LOCAL, SOCK_STREAM, 0)");
50  	close(sock);
51  
52  	sock = socket(PF_LOCAL, SOCK_DGRAM, 0);
53  	if (sock < 0)
54  		err(-1, "socket(PF_LOCAL, SOCK_DGRAM, 0)");
55  	close(sock);
56  
57  	sock = socket(PF_LOCAL, SOCK_RAW, 0);
58  	if (sock >= 0) {
59  		close(sock);
60  		errx(-1, "socket(PF_LOCAL, SOCK_RAW, 0) returned %d", sock);
61  	}
62  	if (errno != EPROTONOSUPPORT)
63  		err(-1, "socket(PF_LOCAL, SOCK_RAW, 0)");
64  
65  	if (socketpair(PF_LOCAL, SOCK_STREAM, 0, socks) < 0)
66  		err(-1, "socketpair(PF_LOCAL, SOCK_STREAM, 0, socks)");
67  	if (socks[0] < 0)
68  		errx(-1, "socketpair(PF_LOCAL, SOCK_STREAM, 0, socks) [0] < 0");
69  	if (socks[1] < 0)
70  		errx(-1, "socketpair(PF_LOCAL, SOCK_STREAM, 0, socks) [1] < 1");
71  	close(socks[0]);
72  	close(socks[1]);
73  
74  	if (socketpair(PF_LOCAL, SOCK_DGRAM, 0, socks) < 0)
75  		err(-1, "socketpair(PF_LOCAL, SOCK_DGRAM, 0, socks)");
76  	if (socks[0] < 0)
77  		errx(-1, "socketpair(PF_LOCAL, SOCK_DGRAM, 0, socks) [0] < 0");
78  	if (socks[1] < 0)
79  		errx(-1, "socketpair(PF_LOCAL, SOCK_DGRAM, 0, socks) [1] < 1");
80  	close(socks[0]);
81  	close(socks[1]);
82  
83  	return (0);
84  }
85