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