Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wine-mirror
GitHub Repository: wine-mirror/wine
Path: blob/master/libs/ldap/include/ac/socket.h
4395 views
1
/* Generic socket.h */
2
/* $OpenLDAP$ */
3
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
4
*
5
* Copyright 1998-2024 The OpenLDAP Foundation.
6
* All rights reserved.
7
*
8
* Redistribution and use in source and binary forms, with or without
9
* modification, are permitted only as authorized by the OpenLDAP
10
* Public License.
11
*
12
* A copy of this license is available in file LICENSE in the
13
* top-level directory of the distribution or, alternatively, at
14
* <http://www.OpenLDAP.org/license.html>.
15
*/
16
17
#ifndef _AC_SOCKET_H_
18
#define _AC_SOCKET_H_
19
20
#ifdef HAVE_SYS_TYPES_H
21
#include <sys/types.h>
22
#endif
23
24
#ifdef HAVE_POLL_H
25
#include <poll.h>
26
#elif defined(HAVE_SYS_POLL_H)
27
#include <sys/poll.h>
28
#endif
29
30
#ifdef HAVE_SYS_SOCKET_H
31
#include <sys/socket.h>
32
33
#ifdef HAVE_SYS_UN_H
34
#include <sys/un.h>
35
#endif
36
37
#ifdef HAVE_SYS_SELECT_H
38
#include <sys/select.h>
39
#endif
40
41
#include <netinet/in.h>
42
43
#ifdef HAVE_NETINET_TCP_H
44
#include <netinet/tcp.h>
45
#endif
46
47
#ifdef HAVE_ARPA_INET_H
48
#include <arpa/inet.h>
49
#endif
50
51
#ifdef HAVE_ARPA_NAMESER_H
52
#include <arpa/nameser.h>
53
#endif
54
55
#include <netdb.h>
56
57
#ifdef HAVE_RESOLV_H
58
#include <resolv.h>
59
#endif
60
61
#endif /* HAVE_SYS_SOCKET_H */
62
63
#ifdef HAVE_WINSOCK2
64
#include <winsock2.h>
65
#include <ws2tcpip.h>
66
#elif defined(HAVE_WINSOCK)
67
#include <winsock.h>
68
#endif
69
70
#ifdef HAVE_PCNFS
71
#include <tklib.h>
72
#endif /* HAVE_PCNFS */
73
74
#ifndef INADDR_LOOPBACK
75
#define INADDR_LOOPBACK (0x7f000001UL)
76
#endif
77
78
#ifndef MAXHOSTNAMELEN
79
#define MAXHOSTNAMELEN 64
80
#endif
81
82
#undef sock_errno
83
#undef sock_errstr
84
#define sock_errno() errno
85
#define sock_errstr(e, b, l) AC_STRERROR_R(e, b, l)
86
#define sock_errset(e) ((void) (errno = (e)))
87
88
#ifdef HAVE_WINSOCK
89
# define tcp_read( s, buf, len ) recv( s, buf, len, 0 )
90
# define tcp_write( s, buf, len ) send( s, buf, len, 0 )
91
# define ioctl( s, c, a ) ioctlsocket( (s), (c), (a) )
92
# define ioctl_t u_long
93
# define AC_SOCKET_INVALID ((unsigned int) -1)
94
95
# ifdef SD_BOTH
96
# define tcp_close( s ) (shutdown( s, SD_BOTH ), closesocket( s ))
97
# else
98
# define tcp_close( s ) closesocket( s )
99
# endif
100
101
#undef EWOULDBLOCK
102
#undef EINPROGRESS
103
#undef ETIMEDOUT
104
#define EWOULDBLOCK WSAEWOULDBLOCK
105
#define EINPROGRESS WSAEINPROGRESS
106
#define ETIMEDOUT WSAETIMEDOUT
107
108
#undef sock_errno
109
#undef sock_errstr
110
#undef sock_errset
111
#define sock_errno() WSAGetLastError()
112
#define sock_errstr(e, b, l) ber_pvt_wsa_err2string(e)
113
#define sock_errset(e) WSASetLastError(e)
114
115
LBER_F( char * ) ber_pvt_wsa_err2string LDAP_P((int));
116
117
#elif defined(MACOS)
118
# define tcp_close( s ) tcpclose( s )
119
# define tcp_read( s, buf, len ) tcpread( s, buf, len )
120
# define tcp_write( s, buf, len ) tcpwrite( s, buf, len )
121
122
#elif defined(HAVE_PCNFS)
123
# define tcp_close( s ) close( s )
124
# define tcp_read( s, buf, len ) recv( s, buf, len, 0 )
125
# define tcp_write( s, buf, len ) send( s, buf, len, 0 )
126
127
#elif defined(HAVE_NCSA)
128
# define tcp_close( s ) do { netclose( s ); netshut() } while(0)
129
# define tcp_read( s, buf, len ) nread( s, buf, len )
130
# define tcp_write( s, buf, len ) netwrite( s, buf, len )
131
132
#elif defined(HAVE_CLOSESOCKET)
133
# define tcp_close( s ) closesocket( s )
134
135
# ifdef __BEOS__
136
# define tcp_read( s, buf, len ) recv( s, buf, len, 0 )
137
# define tcp_write( s, buf, len ) send( s, buf, len, 0 )
138
# endif
139
140
#else
141
# define tcp_read( s, buf, len) read( s, buf, len )
142
# define tcp_write( s, buf, len) write( s, buf, len )
143
144
# ifdef SHUT_RDWR
145
# define tcp_close( s ) (shutdown( s, SHUT_RDWR ), close( s ))
146
# else
147
# define tcp_close( s ) close( s )
148
# endif
149
150
#ifdef HAVE_PIPE
151
/*
152
* Only use pipe() on systems where file and socket descriptors
153
* are interchangeable
154
*/
155
# define USE_PIPE HAVE_PIPE
156
#endif
157
158
#endif /* MACOS */
159
160
#ifndef ioctl_t
161
# define ioctl_t int
162
#endif
163
164
#ifndef AC_SOCKET_INVALID
165
# define AC_SOCKET_INVALID (-1)
166
#endif
167
#ifndef AC_SOCKET_ERROR
168
# define AC_SOCKET_ERROR (-1)
169
#endif
170
171
#if !defined( HAVE_INET_ATON ) && !defined( inet_aton )
172
# define inet_aton ldap_pvt_inet_aton
173
struct in_addr;
174
LDAP_F (int) ldap_pvt_inet_aton LDAP_P(( const char *, struct in_addr * ));
175
#endif
176
177
#if defined(__WIN32) && defined(_ALPHA)
178
/* NT on Alpha is hosed. */
179
# define AC_HTONL( l ) \
180
((((l)&0xffU)<<24) + (((l)&0xff00U)<<8) + \
181
(((l)&0xff0000U)>>8) + (((l)&0xff000000U)>>24))
182
# define AC_NTOHL(l) AC_HTONL(l)
183
184
#else
185
# define AC_HTONL( l ) htonl( l )
186
# define AC_NTOHL( l ) ntohl( l )
187
#endif
188
189
/* htons()/ntohs() may be broken much like htonl()/ntohl() */
190
#define AC_HTONS( s ) htons( s )
191
#define AC_NTOHS( s ) ntohs( s )
192
193
#ifdef LDAP_PF_LOCAL
194
# if !defined( AF_LOCAL ) && defined( AF_UNIX )
195
# define AF_LOCAL AF_UNIX
196
# endif
197
# if !defined( PF_LOCAL ) && defined( PF_UNIX )
198
# define PF_LOCAL PF_UNIX
199
# endif
200
#endif
201
202
#ifndef INET_ADDRSTRLEN
203
# define INET_ADDRSTRLEN 16
204
#endif
205
#ifndef INET6_ADDRSTRLEN
206
# define INET6_ADDRSTRLEN 46
207
#endif
208
209
#if defined( HAVE_GETADDRINFO ) || defined( HAVE_GETNAMEINFO )
210
# ifdef HAVE_GAI_STRERROR
211
# define AC_GAI_STRERROR(x) (gai_strerror((x)))
212
# else
213
# define AC_GAI_STRERROR(x) (ldap_pvt_gai_strerror((x)))
214
LDAP_F (char *) ldap_pvt_gai_strerror( int );
215
# endif
216
#endif
217
218
#if defined(LDAP_PF_LOCAL) && \
219
!defined(HAVE_GETPEEREID) && \
220
!defined(HAVE_GETPEERUCRED) && \
221
!defined(SO_PEERCRED) && !defined(LOCAL_PEERCRED) && \
222
defined(HAVE_SENDMSG) && (defined(HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTSLEN) || \
223
defined(HAVE_STRUCT_MSGHDR_MSG_CONTROL))
224
# define LDAP_PF_LOCAL_SENDMSG 1
225
#endif
226
227
#ifdef HAVE_GETPEEREID
228
#define LUTIL_GETPEEREID( s, uid, gid, bv ) getpeereid( s, uid, gid )
229
#elif defined(LDAP_PF_LOCAL_SENDMSG)
230
struct berval;
231
LDAP_LUTIL_F( int ) lutil_getpeereid( int s, uid_t *, gid_t *, struct berval *bv );
232
#define LUTIL_GETPEEREID( s, uid, gid, bv ) lutil_getpeereid( s, uid, gid, bv )
233
#else
234
LDAP_LUTIL_F( int ) lutil_getpeereid( int s, uid_t *, gid_t * );
235
#define LUTIL_GETPEEREID( s, uid, gid, bv ) lutil_getpeereid( s, uid, gid )
236
#endif
237
238
typedef union Sockaddr {
239
struct sockaddr sa_addr;
240
struct sockaddr_in sa_in_addr;
241
#ifdef LDAP_PF_INET6
242
struct sockaddr_storage sa_storage;
243
struct sockaddr_in6 sa_in6_addr;
244
#endif
245
#ifdef LDAP_PF_LOCAL
246
struct sockaddr_un sa_un_addr;
247
#endif
248
} Sockaddr;
249
250
/* DNS RFC defines max host name as 255. New systems seem to use 1024 */
251
#ifndef NI_MAXHOST
252
#define NI_MAXHOST 256
253
#endif
254
255
#ifdef HAVE_POLL
256
# ifndef INFTIM
257
# define INFTIM (-1)
258
# endif
259
#undef POLL_OTHER
260
#define POLL_OTHER (POLLERR|POLLHUP)
261
#undef POLL_READ
262
#define POLL_READ (POLLIN|POLLPRI|POLL_OTHER)
263
#undef POLL_WRITE
264
#define POLL_WRITE (POLLOUT|POLL_OTHER)
265
#endif
266
267
#endif /* _AC_SOCKET_H_ */
268
269