xref: /netbsd-src/external/bsd/openldap/dist/include/ac/socket.h (revision 549b59ed3ccf0d36d3097190a0db27b770f3a839)
1*549b59edSchristos /*	$NetBSD: socket.h,v 1.3 2021/08/14 16:14:55 christos Exp $	*/
24e6df137Slukem 
32de962bdSlukem /* Generic socket.h */
4d11b170bStron /* $OpenLDAP$ */
52de962bdSlukem /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
62de962bdSlukem  *
7*549b59edSchristos  * Copyright 1998-2021 The OpenLDAP Foundation.
82de962bdSlukem  * All rights reserved.
92de962bdSlukem  *
102de962bdSlukem  * Redistribution and use in source and binary forms, with or without
112de962bdSlukem  * modification, are permitted only as authorized by the OpenLDAP
122de962bdSlukem  * Public License.
132de962bdSlukem  *
142de962bdSlukem  * A copy of this license is available in file LICENSE in the
152de962bdSlukem  * top-level directory of the distribution or, alternatively, at
162de962bdSlukem  * <http://www.OpenLDAP.org/license.html>.
172de962bdSlukem  */
182de962bdSlukem 
192de962bdSlukem #ifndef _AC_SOCKET_H_
202de962bdSlukem #define _AC_SOCKET_H_
212de962bdSlukem 
222de962bdSlukem #ifdef HAVE_SYS_TYPES_H
232de962bdSlukem #include <sys/types.h>
242de962bdSlukem #endif
252de962bdSlukem 
262de962bdSlukem #ifdef HAVE_POLL_H
272de962bdSlukem #include <poll.h>
282de962bdSlukem #elif defined(HAVE_SYS_POLL_H)
292de962bdSlukem #include <sys/poll.h>
302de962bdSlukem #endif
312de962bdSlukem 
322de962bdSlukem #ifdef HAVE_SYS_SOCKET_H
332de962bdSlukem #include <sys/socket.h>
342de962bdSlukem 
352de962bdSlukem #ifdef HAVE_SYS_UN_H
362de962bdSlukem #include <sys/un.h>
372de962bdSlukem #endif
382de962bdSlukem 
392de962bdSlukem #ifdef HAVE_SYS_SELECT_H
402de962bdSlukem #include <sys/select.h>
412de962bdSlukem #endif
422de962bdSlukem 
432de962bdSlukem #include <netinet/in.h>
442de962bdSlukem 
452de962bdSlukem #ifdef HAVE_NETINET_TCP_H
462de962bdSlukem #include <netinet/tcp.h>
472de962bdSlukem #endif
482de962bdSlukem 
492de962bdSlukem #ifdef HAVE_ARPA_INET_H
502de962bdSlukem #include <arpa/inet.h>
512de962bdSlukem #endif
522de962bdSlukem 
532de962bdSlukem #ifdef HAVE_ARPA_NAMESER_H
542de962bdSlukem #include <arpa/nameser.h>
552de962bdSlukem #endif
562de962bdSlukem 
572de962bdSlukem #include <netdb.h>
582de962bdSlukem 
592de962bdSlukem #ifdef HAVE_RESOLV_H
602de962bdSlukem #include <resolv.h>
612de962bdSlukem #endif
622de962bdSlukem 
632de962bdSlukem #endif /* HAVE_SYS_SOCKET_H */
642de962bdSlukem 
652de962bdSlukem #ifdef HAVE_WINSOCK2
662de962bdSlukem #include <winsock2.h>
67d11b170bStron #include <ws2tcpip.h>
682de962bdSlukem #elif HAVE_WINSOCK
692de962bdSlukem #include <winsock.h>
702de962bdSlukem #endif
712de962bdSlukem 
722de962bdSlukem #ifdef HAVE_PCNFS
732de962bdSlukem #include <tklib.h>
742de962bdSlukem #endif /* HAVE_PCNFS */
752de962bdSlukem 
762de962bdSlukem #ifndef INADDR_LOOPBACK
772de962bdSlukem #define INADDR_LOOPBACK	(0x7f000001UL)
782de962bdSlukem #endif
792de962bdSlukem 
802de962bdSlukem #ifndef MAXHOSTNAMELEN
812de962bdSlukem #define MAXHOSTNAMELEN  64
822de962bdSlukem #endif
832de962bdSlukem 
842de962bdSlukem #undef	sock_errno
852de962bdSlukem #undef	sock_errstr
862de962bdSlukem #define sock_errno()	errno
87*549b59edSchristos #define sock_errstr(e, b, l)	AC_STRERROR_R(e, b, l)
884e6df137Slukem #define sock_errset(e)	((void) (errno = (e)))
892de962bdSlukem 
902de962bdSlukem #ifdef HAVE_WINSOCK
912de962bdSlukem #	define tcp_read( s, buf, len )	recv( s, buf, len, 0 )
922de962bdSlukem #	define tcp_write( s, buf, len )	send( s, buf, len, 0 )
932de962bdSlukem #	define ioctl( s, c, a )		ioctlsocket( (s), (c), (a) )
942de962bdSlukem #	define ioctl_t				u_long
954e6df137Slukem #	define AC_SOCKET_INVALID	((unsigned int) -1)
962de962bdSlukem 
972de962bdSlukem #	ifdef SD_BOTH
982de962bdSlukem #		define tcp_close( s )	(shutdown( s, SD_BOTH ), closesocket( s ))
992de962bdSlukem #	else
1002de962bdSlukem #		define tcp_close( s )		closesocket( s )
1012de962bdSlukem #	endif
1022de962bdSlukem 
1032de962bdSlukem #define EWOULDBLOCK WSAEWOULDBLOCK
1042de962bdSlukem #define EINPROGRESS WSAEINPROGRESS
1052de962bdSlukem #define ETIMEDOUT	WSAETIMEDOUT
1062de962bdSlukem 
1072de962bdSlukem #undef	sock_errno
1082de962bdSlukem #undef	sock_errstr
1092de962bdSlukem #undef	sock_errset
1102de962bdSlukem #define	sock_errno()	WSAGetLastError()
111*549b59edSchristos #define	sock_errstr(e, b, l)	ber_pvt_wsa_err2string(e)
1122de962bdSlukem #define	sock_errset(e)	WSASetLastError(e)
1132de962bdSlukem 
1142de962bdSlukem LBER_F( char * ) ber_pvt_wsa_err2string LDAP_P((int));
1152de962bdSlukem 
1162de962bdSlukem #elif MACOS
1172de962bdSlukem #	define tcp_close( s )		tcpclose( s )
1182de962bdSlukem #	define tcp_read( s, buf, len )	tcpread( s, buf, len )
1192de962bdSlukem #	define tcp_write( s, buf, len )	tcpwrite( s, buf, len )
1202de962bdSlukem 
1212de962bdSlukem #elif DOS
1222de962bdSlukem #	ifdef PCNFS
1232de962bdSlukem #		define tcp_close( s )	close( s )
1242de962bdSlukem #		define tcp_read( s, buf, len )	recv( s, buf, len, 0 )
1252de962bdSlukem #		define tcp_write( s, buf, len )	send( s, buf, len, 0 )
1262de962bdSlukem #	endif /* PCNFS */
1272de962bdSlukem #	ifdef NCSA
1282de962bdSlukem #		define tcp_close( s )	do { netclose( s ); netshut() } while(0)
1292de962bdSlukem #		define tcp_read( s, buf, len )	nread( s, buf, len )
1302de962bdSlukem #		define tcp_write( s, buf, len )	netwrite( s, buf, len )
1312de962bdSlukem #	endif /* NCSA */
1322de962bdSlukem 
1332de962bdSlukem #elif defined(HAVE_CLOSESOCKET)
1342de962bdSlukem #	define tcp_close( s )		closesocket( s )
1352de962bdSlukem 
1362de962bdSlukem #	ifdef __BEOS__
1372de962bdSlukem #		define tcp_read( s, buf, len )	recv( s, buf, len, 0 )
1382de962bdSlukem #		define tcp_write( s, buf, len )	send( s, buf, len, 0 )
1392de962bdSlukem #	endif
1402de962bdSlukem 
1412de962bdSlukem #else
1422de962bdSlukem #	define tcp_read( s, buf, len)	read( s, buf, len )
1432de962bdSlukem #	define tcp_write( s, buf, len)	write( s, buf, len )
1442de962bdSlukem 
1452de962bdSlukem #	ifdef SHUT_RDWR
1462de962bdSlukem #		define tcp_close( s )	(shutdown( s, SHUT_RDWR ), close( s ))
1472de962bdSlukem #	else
1482de962bdSlukem #		define tcp_close( s )	close( s )
1492de962bdSlukem #	endif
1502de962bdSlukem 
1512de962bdSlukem #ifdef HAVE_PIPE
1522de962bdSlukem /*
1532de962bdSlukem  * Only use pipe() on systems where file and socket descriptors
154*549b59edSchristos  * are interchangeable
1552de962bdSlukem  */
1562de962bdSlukem #	define USE_PIPE HAVE_PIPE
1572de962bdSlukem #endif
1582de962bdSlukem 
1592de962bdSlukem #endif /* MACOS */
1602de962bdSlukem 
1612de962bdSlukem #ifndef ioctl_t
1622de962bdSlukem #	define ioctl_t				int
1632de962bdSlukem #endif
1642de962bdSlukem 
1652de962bdSlukem #ifndef AC_SOCKET_INVALID
1662de962bdSlukem #	define AC_SOCKET_INVALID	(-1)
1672de962bdSlukem #endif
1682de962bdSlukem #ifndef AC_SOCKET_ERROR
1692de962bdSlukem #	define AC_SOCKET_ERROR		(-1)
1702de962bdSlukem #endif
1712de962bdSlukem 
1722de962bdSlukem #if !defined( HAVE_INET_ATON ) && !defined( inet_aton )
1732de962bdSlukem #	define inet_aton ldap_pvt_inet_aton
1742de962bdSlukem struct in_addr;
1752de962bdSlukem LDAP_F (int) ldap_pvt_inet_aton LDAP_P(( const char *, struct in_addr * ));
1762de962bdSlukem #endif
1772de962bdSlukem 
1782de962bdSlukem #if	defined(__WIN32) && defined(_ALPHA)
1792de962bdSlukem /* NT on Alpha is hosed. */
1802de962bdSlukem #	define AC_HTONL( l ) \
1812de962bdSlukem         ((((l)&0xffU)<<24) + (((l)&0xff00U)<<8) + \
1822de962bdSlukem          (((l)&0xff0000U)>>8) + (((l)&0xff000000U)>>24))
1832de962bdSlukem #	define AC_NTOHL(l) AC_HTONL(l)
1842de962bdSlukem 
1852de962bdSlukem #else
1862de962bdSlukem #	define AC_HTONL( l ) htonl( l )
1872de962bdSlukem #	define AC_NTOHL( l ) ntohl( l )
1882de962bdSlukem #endif
1892de962bdSlukem 
1902de962bdSlukem /* htons()/ntohs() may be broken much like htonl()/ntohl() */
1912de962bdSlukem #define AC_HTONS( s ) htons( s )
1922de962bdSlukem #define AC_NTOHS( s ) ntohs( s )
1932de962bdSlukem 
1942de962bdSlukem #ifdef LDAP_PF_LOCAL
1952de962bdSlukem #  if !defined( AF_LOCAL ) && defined( AF_UNIX )
1962de962bdSlukem #    define AF_LOCAL	AF_UNIX
1972de962bdSlukem #  endif
1982de962bdSlukem #  if !defined( PF_LOCAL ) && defined( PF_UNIX )
1992de962bdSlukem #    define PF_LOCAL	PF_UNIX
2002de962bdSlukem #  endif
2012de962bdSlukem #endif
2022de962bdSlukem 
2032de962bdSlukem #ifndef INET_ADDRSTRLEN
2042de962bdSlukem #	define INET_ADDRSTRLEN 16
2052de962bdSlukem #endif
2062de962bdSlukem #ifndef INET6_ADDRSTRLEN
2072de962bdSlukem #	define INET6_ADDRSTRLEN 46
2082de962bdSlukem #endif
2092de962bdSlukem 
2102de962bdSlukem #if defined( HAVE_GETADDRINFO ) || defined( HAVE_GETNAMEINFO )
2112de962bdSlukem #	ifdef HAVE_GAI_STRERROR
2122de962bdSlukem #		define AC_GAI_STRERROR(x)	(gai_strerror((x)))
2132de962bdSlukem #	else
2142de962bdSlukem #		define AC_GAI_STRERROR(x)	(ldap_pvt_gai_strerror((x)))
2152de962bdSlukem 		LDAP_F (char *) ldap_pvt_gai_strerror( int );
2162de962bdSlukem #	endif
2172de962bdSlukem #endif
2182de962bdSlukem 
2192de962bdSlukem #if defined(LDAP_PF_LOCAL) && \
2202de962bdSlukem 	!defined(HAVE_GETPEEREID) && \
2212de962bdSlukem 	!defined(HAVE_GETPEERUCRED) && \
2222de962bdSlukem 	!defined(SO_PEERCRED) && !defined(LOCAL_PEERCRED) && \
2232de962bdSlukem 	defined(HAVE_SENDMSG) && (defined(HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTSLEN) || \
2242de962bdSlukem 	defined(HAVE_STRUCT_MSGHDR_MSG_CONTROL))
2252de962bdSlukem #	define LDAP_PF_LOCAL_SENDMSG 1
2262de962bdSlukem #endif
2272de962bdSlukem 
2282de962bdSlukem #ifdef HAVE_GETPEEREID
2292de962bdSlukem #define	LUTIL_GETPEEREID( s, uid, gid, bv )	getpeereid( s, uid, gid )
2302de962bdSlukem #elif defined(LDAP_PF_LOCAL_SENDMSG)
2312de962bdSlukem struct berval;
2322de962bdSlukem LDAP_LUTIL_F( int ) lutil_getpeereid( int s, uid_t *, gid_t *, struct berval *bv );
2332de962bdSlukem #define	LUTIL_GETPEEREID( s, uid, gid, bv )	lutil_getpeereid( s, uid, gid, bv )
2342de962bdSlukem #else
2352de962bdSlukem LDAP_LUTIL_F( int ) lutil_getpeereid( int s, uid_t *, gid_t * );
2362de962bdSlukem #define	LUTIL_GETPEEREID( s, uid, gid, bv )	lutil_getpeereid( s, uid, gid )
2372de962bdSlukem #endif
2382de962bdSlukem 
239*549b59edSchristos union Sockaddr {
240*549b59edSchristos 	struct sockaddr sa_addr;
241*549b59edSchristos 	struct sockaddr_in sa_in_addr;
242*549b59edSchristos #ifdef LDAP_PF_INET6
243*549b59edSchristos 	struct sockaddr_storage sa_storage;
244*549b59edSchristos 	struct sockaddr_in6 sa_in6_addr;
245*549b59edSchristos #endif
246*549b59edSchristos #ifdef LDAP_PF_LOCAL
247*549b59edSchristos 	struct sockaddr_un sa_un_addr;
248*549b59edSchristos #endif
249*549b59edSchristos };
250*549b59edSchristos 
2512de962bdSlukem /* DNS RFC defines max host name as 255. New systems seem to use 1024 */
2522de962bdSlukem #ifndef NI_MAXHOST
2532de962bdSlukem #define	NI_MAXHOST	256
2542de962bdSlukem #endif
2552de962bdSlukem 
2562de962bdSlukem #ifdef HAVE_POLL
2572de962bdSlukem # ifndef INFTIM
2582de962bdSlukem #  define INFTIM (-1)
2592de962bdSlukem # endif
2602de962bdSlukem #undef POLL_OTHER
2612de962bdSlukem #define POLL_OTHER   (POLLERR|POLLHUP)
2622de962bdSlukem #undef POLL_READ
2632de962bdSlukem #define POLL_READ    (POLLIN|POLLPRI|POLL_OTHER)
2642de962bdSlukem #undef POLL_WRITE
2652de962bdSlukem #define POLL_WRITE   (POLLOUT|POLL_OTHER)
2662de962bdSlukem #endif
2672de962bdSlukem 
2682de962bdSlukem #endif /* _AC_SOCKET_H_ */
269