1 /*
2  * Public domain
3  * sys/socket.h compatibility shim
4  */
5 
6 #include_next <sys/socket.h>
7 
8 #ifndef SA_LEN
9 #define SA_LEN(X) \
10 	(((struct sockaddr*)(X))->sa_family == AF_INET ? sizeof(struct sockaddr_in) : \
11 	 ((struct sockaddr*)(X))->sa_family == AF_INET6 ? sizeof(struct sockaddr_in6) : \
12 	 ((struct sockaddr*)(X))->sa_family == AF_UNSPEC ? sizeof(struct sockaddr) : \
13 	   sizeof(struct sockaddr))
14 #endif
15 
16 #if !defined(SOCK_NONBLOCK) || !defined(SOCK_CLOEXEC)
17 #define NEED_SOCKET_FLAGS
18 int _socket(int domain, int type, int protocol);
19 int _socketpair(int domain, int type, int protocol, int socket_vector[2]);
20 #ifndef SOCKET_FLAGS_PRIV
21 #define socket(d, t, p) _socket(d, t, p)
22 #define socketpair(d, t, p, s) _socketpair(d, t, p, s)
23 #endif
24 #endif
25 
26 /*
27  * Prevent Solaris 10 system header leakage
28  */
29 #ifdef MODEMASK
30 #undef MODEMASK
31 #endif
32 
33 #ifndef SOCK_NONBLOCK
34 #define	SOCK_NONBLOCK		0x4000	/* set O_NONBLOCK */
35 #endif
36 
37 #ifndef SOCK_CLOEXEC
38 #define	SOCK_CLOEXEC		0x8000	/* set FD_CLOEXEC */
39 #endif
40