summaryrefslogtreecommitdiffstats
path: root/gl/sys_socket.in.h
diff options
context:
space:
mode:
Diffstat (limited to 'gl/sys_socket.in.h')
-rw-r--r--gl/sys_socket.in.h338
1 files changed, 325 insertions, 13 deletions
diff --git a/gl/sys_socket.in.h b/gl/sys_socket.in.h
index 5e0b097..5d9b3cd 100644
--- a/gl/sys_socket.in.h
+++ b/gl/sys_socket.in.h
@@ -1,5 +1,6 @@
1/* Provide a sys/socket header file for systems lacking it (read: MinGW). 1/* Provide a sys/socket header file for systems lacking it (read: MinGW)
2 Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. 2 and for systems where it is incomplete.
3 Copyright (C) 2005-2008 Free Software Foundation, Inc.
3 Written by Simon Josefsson. 4 Written by Simon Josefsson.
4 5
5 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
@@ -16,8 +17,9 @@
16 along with this program; if not, write to the Free Software Foundation, 17 along with this program; if not, write to the Free Software Foundation,
17 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ 18 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
18 19
19/* This file is supposed to be used on platforms that lack <sys/socket.h> 20/* This file is supposed to be used on platforms that lack <sys/socket.h>,
20 and on platforms where <sys/socket.h> cannot be included standalone. 21 on platforms where <sys/socket.h> cannot be included standalone, and on
22 platforms where <sys/socket.h> does not provide all necessary definitions.
21 It is intended to provide definitions and prototypes needed by an 23 It is intended to provide definitions and prototypes needed by an
22 application. */ 24 application. */
23 25
@@ -25,6 +27,10 @@
25 27
26#if @HAVE_SYS_SOCKET_H@ 28#if @HAVE_SYS_SOCKET_H@
27 29
30# if __GNUC__ >= 3
31@PRAGMA_SYSTEM_HEADER@
32# endif
33
28/* On many platforms, <sys/socket.h> assumes prior inclusion of 34/* On many platforms, <sys/socket.h> assumes prior inclusion of
29 <sys/types.h>. */ 35 <sys/types.h>. */
30# include <sys/types.h> 36# include <sys/types.h>
@@ -37,7 +43,26 @@
37#ifndef _GL_SYS_SOCKET_H 43#ifndef _GL_SYS_SOCKET_H
38#define _GL_SYS_SOCKET_H 44#define _GL_SYS_SOCKET_H
39 45
40#if !@HAVE_SYS_SOCKET_H@ 46#if @HAVE_SYS_SOCKET_H@
47
48/* A platform that has <sys/socket.h>. */
49
50/* For shutdown(). */
51# if !defined SHUT_RD
52# define SHUT_RD 0
53# endif
54# if !defined SHUT_WR
55# define SHUT_WR 1
56# endif
57# if !defined SHUT_RDWR
58# define SHUT_RDWR 2
59# endif
60
61#else
62
63# ifdef __CYGWIN__
64# error "Cygwin does have a sys/socket.h, doesn't it?!?"
65# endif
41 66
42/* A platform that lacks <sys/socket.h>. 67/* A platform that lacks <sys/socket.h>.
43 68
@@ -75,14 +100,301 @@
75# define SHUT_RDWR SD_BOTH 100# define SHUT_RDWR SD_BOTH
76# endif 101# endif
77 102
78# if defined _WIN32 || defined __WIN32__ 103/* The definition of GL_LINK_WARNING is copied here. */
79# define ENOTSOCK WSAENOTSOCK 104
80# define EADDRINUSE WSAEADDRINUSE 105# if @HAVE_WINSOCK2_H@
81# define ENETRESET WSAENETRESET 106/* Include headers needed by the emulation code. */
82# define ECONNABORTED WSAECONNABORTED 107# include <sys/types.h>
83# define ECONNRESET WSAECONNRESET 108# include <io.h>
84# define ENOTCONN WSAENOTCONN 109
85# define ESHUTDOWN WSAESHUTDOWN 110typedef int socklen_t;
111
112# endif
113
114# ifdef __cplusplus
115extern "C" {
116# endif
117
118# if @HAVE_WINSOCK2_H@
119
120/* Re-define FD_ISSET to avoid a WSA call while we are not using
121 network sockets. */
122static inline int
123rpl_fd_isset (SOCKET fd, fd_set * set)
124{
125 u_int i;
126 if (set == NULL)
127 return 0;
128
129 for (i = 0; i < set->fd_count; i++)
130 if (set->fd_array[i] == fd)
131 return 1;
132
133 return 0;
134}
135
136# undef FD_ISSET
137# define FD_ISSET(fd, set) rpl_fd_isset(fd, set)
138
139# endif
140
141/* Wrap everything else to use libc file descriptors for sockets. */
142
143# if @HAVE_WINSOCK2_H@ && !defined _GL_UNISTD_H
144# undef close
145# define close close_used_without_including_unistd_h
146# endif
147
148# if @HAVE_WINSOCK2_H@ && !defined _GL_UNISTD_H
149# undef gethostname
150# define gethostname gethostname_used_without_including_unistd_h
151# endif
152
153# if @GNULIB_SOCKET@
154# if @HAVE_WINSOCK2_H@
155# undef socket
156# define socket rpl_socket
157extern int rpl_socket (int, int, int protocol);
158# endif
159# elif @HAVE_WINSOCK2_H@
160# undef socket
161# define socket socket_used_without_requesting_gnulib_module_socket
162# elif defined GNULIB_POSIXCHECK
163# undef socket
164# define socket(d,t,p) \
165 (GL_LINK_WARNING ("socket is not always POSIX compliant - " \
166 "use gnulib module socket for portability"), \
167 socket (d, t, p))
168# endif
169
170# if @GNULIB_CONNECT@
171# if @HAVE_WINSOCK2_H@
172# undef connect
173# define connect rpl_connect
174extern int rpl_connect (int, struct sockaddr *, int);
175# endif
176# elif @HAVE_WINSOCK2_H@
177# undef connect
178# define connect socket_used_without_requesting_gnulib_module_connect
179# elif defined GNULIB_POSIXCHECK
180# undef connect
181# define connect(s,a,l) \
182 (GL_LINK_WARNING ("connect is not always POSIX compliant - " \
183 "use gnulib module connect for portability"), \
184 connect (s, a, l))
185# endif
186
187# if @GNULIB_ACCEPT@
188# if @HAVE_WINSOCK2_H@
189# undef accept
190# define accept rpl_accept
191extern int rpl_accept (int, struct sockaddr *, int *);
192# endif
193# elif @HAVE_WINSOCK2_H@
194# undef accept
195# define accept accept_used_without_requesting_gnulib_module_accept
196# elif defined GNULIB_POSIXCHECK
197# undef accept
198# define accept(s,a,l) \
199 (GL_LINK_WARNING ("accept is not always POSIX compliant - " \
200 "use gnulib module accept for portability"), \
201 accept (s, a, l))
202# endif
203
204# if @GNULIB_BIND@
205# if @HAVE_WINSOCK2_H@
206# undef bind
207# define bind rpl_bind
208extern int rpl_bind (int, struct sockaddr *, int);
209# endif
210# elif @HAVE_WINSOCK2_H@
211# undef bind
212# define bind bind_used_without_requesting_gnulib_module_bind
213# elif defined GNULIB_POSIXCHECK
214# undef bind
215# define bind(s,a,l) \
216 (GL_LINK_WARNING ("bind is not always POSIX compliant - " \
217 "use gnulib module bind for portability"), \
218 bind (s, a, l))
219# endif
220
221# if @GNULIB_GETPEERNAME@
222# if @HAVE_WINSOCK2_H@
223# undef getpeername
224# define getpeername rpl_getpeername
225extern int rpl_getpeername (int, struct sockaddr *, int *);
226# endif
227# elif @HAVE_WINSOCK2_H@
228# undef getpeername
229# define getpeername getpeername_used_without_requesting_gnulib_module_getpeername
230# elif defined GNULIB_POSIXCHECK
231# undef getpeername
232# define getpeername(s,a,l) \
233 (GL_LINK_WARNING ("getpeername is not always POSIX compliant - " \
234 "use gnulib module getpeername for portability"), \
235 getpeername (s, a, l))
236# endif
237
238# if @GNULIB_GETSOCKNAME@
239# if @HAVE_WINSOCK2_H@
240# undef getsockname
241# define getsockname rpl_getsockname
242extern int rpl_getsockname (int, struct sockaddr *, int *);
243# endif
244# elif @HAVE_WINSOCK2_H@
245# undef getsockname
246# define getsockname getsockname_used_without_requesting_gnulib_module_getsockname
247# elif defined GNULIB_POSIXCHECK
248# undef getsockname
249# define getsockname(s,a,l) \
250 (GL_LINK_WARNING ("getsockname is not always POSIX compliant - " \
251 "use gnulib module getsockname for portability"), \
252 getsockname (s, a, l))
253# endif
254
255# if @GNULIB_GETSOCKOPT@
256# if @HAVE_WINSOCK2_H@
257# undef getsockopt
258# define getsockopt rpl_getsockopt
259extern int rpl_getsockopt (int, int, int, void *, int *);
260# endif
261# elif @HAVE_WINSOCK2_H@
262# undef getsockopt
263# define getsockopt getsockopt_used_without_requesting_gnulib_module_getsockopt
264# elif defined GNULIB_POSIXCHECK
265# undef getsockopt
266# define getsockopt(s,lvl,o,v,l) \
267 (GL_LINK_WARNING ("getsockopt is not always POSIX compliant - " \
268 "use gnulib module getsockopt for portability"), \
269 getsockopt (s, lvl, o, v, l))
270# endif
271
272# if @GNULIB_LISTEN@
273# if @HAVE_WINSOCK2_H@
274# undef listen
275# define listen rpl_listen
276extern int rpl_listen (int, int);
277# endif
278# elif @HAVE_WINSOCK2_H@
279# undef listen
280# define listen listen_used_without_requesting_gnulib_module_listen
281# elif defined GNULIB_POSIXCHECK
282# undef listen
283# define listen(s,b) \
284 (GL_LINK_WARNING ("listen is not always POSIX compliant - " \
285 "use gnulib module listen for portability"), \
286 listen (s, b))
287# endif
288
289# if @GNULIB_RECV@
290# if @HAVE_WINSOCK2_H@
291# undef recv
292# define recv rpl_recv
293extern int rpl_recv (int, void *, int, int);
294# endif
295# elif @HAVE_WINSOCK2_H@
296# undef recv
297# define recv recv_used_without_requesting_gnulib_module_recv
298# elif defined GNULIB_POSIXCHECK
299# undef recv
300# define recv(s,b,n,f) \
301 (GL_LINK_WARNING ("recv is not always POSIX compliant - " \
302 "use gnulib module recv for portability"), \
303 recv (s, b, n, f))
304# endif
305
306# if @GNULIB_SEND@
307# if @HAVE_WINSOCK2_H@
308# undef send
309# define send rpl_send
310extern int rpl_send (int, const void *, int, int);
311# endif
312# elif @HAVE_WINSOCK2_H@
313# undef send
314# define send send_used_without_requesting_gnulib_module_send
315# elif defined GNULIB_POSIXCHECK
316# undef send
317# define send(s,b,n,f) \
318 (GL_LINK_WARNING ("send is not always POSIX compliant - " \
319 "use gnulib module send for portability"), \
320 send (s, b, n, f))
321# endif
322
323# if @GNULIB_RECVFROM@
324# if @HAVE_WINSOCK2_H@
325# undef recvfrom
326# define recvfrom rpl_recvfrom
327extern int rpl_recvfrom (int, void *, int, int, struct sockaddr *, int *);
328# endif
329# elif @HAVE_WINSOCK2_H@
330# undef recvfrom
331# define recvfrom recvfrom_used_without_requesting_gnulib_module_recvfrom
332# elif defined GNULIB_POSIXCHECK
333# undef recvfrom
334# define recvfrom(s,b,n,f,a,l) \
335 (GL_LINK_WARNING ("recvfrom is not always POSIX compliant - " \
336 "use gnulib module recvfrom for portability"), \
337 recvfrom (s, b, n, f, a, l))
338# endif
339
340# if @GNULIB_SENDTO@
341# if @HAVE_WINSOCK2_H@
342# undef sendto
343# define sendto rpl_sendto
344extern int rpl_sendto (int, const void *, int, int, struct sockaddr *, int);
345# endif
346# elif @HAVE_WINSOCK2_H@
347# undef sendto
348# define sendto sendto_used_without_requesting_gnulib_module_sendto
349# elif defined GNULIB_POSIXCHECK
350# undef sendto
351# define sendto(s,b,n,f,a,l) \
352 (GL_LINK_WARNING ("sendto is not always POSIX compliant - " \
353 "use gnulib module sendto for portability"), \
354 sendto (s, b, n, f, a, l))
355# endif
356
357# if @GNULIB_SETSOCKOPT@
358# if @HAVE_WINSOCK2_H@
359# undef setsockopt
360# define setsockopt rpl_setsockopt
361extern int rpl_setsockopt (int, int, int, const void *, int);
362# endif
363# elif @HAVE_WINSOCK2_H@
364# undef setsockopt
365# define setsockopt setsockopt_used_without_requesting_gnulib_module_setsockopt
366# elif defined GNULIB_POSIXCHECK
367# undef setsockopt
368# define setsockopt(s,lvl,o,v,l) \
369 (GL_LINK_WARNING ("setsockopt is not always POSIX compliant - " \
370 "use gnulib module setsockopt for portability"), \
371 setsockopt (s, lvl, o, v, l))
372# endif
373
374# if @GNULIB_SHUTDOWN@
375# if @HAVE_WINSOCK2_H@
376# undef shutdown
377# define shutdown rpl_shutdown
378extern int rpl_shutdown (int, int);
379# endif
380# elif @HAVE_WINSOCK2_H@
381# undef shutdown
382# define shutdown shutdown_used_without_requesting_gnulib_module_shutdown
383# elif defined GNULIB_POSIXCHECK
384# undef shutdown
385# define shutdown(s,h) \
386 (GL_LINK_WARNING ("shutdown is not always POSIX compliant - " \
387 "use gnulib module shutdown for portability"), \
388 shutdown (s, h))
389# endif
390
391# if @HAVE_WINSOCK2_H@
392# undef select
393# define select select_used_without_including_sys_select_h
394# endif
395
396# ifdef __cplusplus
397}
86# endif 398# endif
87 399
88#endif /* HAVE_SYS_SOCKET_H */ 400#endif /* HAVE_SYS_SOCKET_H */