• R/O
  • HTTP
  • SSH
  • HTTPS

mingw-org-wsl: Commit

The MinGW.OSDN Windows System Libraries. Formerly designated as "MinGW.org Windows System Libraries", this encapsulates the "mingwrt" C runtime library extensions, and the "w32api" 32-bit MS-Windows API libraries.

Please note that this project no longer owns the "MinGW.org" domain name; any software which may be distributed from that domain is NOT supported by this project.


Commit MetaInfo

Revision411a15dacafc564d2620284f0393e1879488761e (tree)
Time2017-11-25 02:04:18
AuthorKeith Marshall <keith@user...>
CommiterKeith Marshall

Log Message

Make <winsock.h> and <winsock2.h> duplicate code congruent.

Change Summary

Incremental Difference

--- a/w32api/ChangeLog
+++ b/w32api/ChangeLog
@@ -1,3 +1,30 @@
1+2017-11-24 Keith Marshall <keith@users.osdn.me>
2+
3+ Make <winsock.h> and <winsock2.h> duplicate code congruent.
4+
5+ * include/winsock.h (SOMAXCONN): Move definition into...
6+ [!__INSIDE_MSYS__]: ...this guarded scope.
7+
8+ * include/winsock2.h: Rearrange as necessary.
9+ [_BEGIN_C_DECLS, _END_C_DECLS]: Keep them balanced.
10+ (_USE_SYS_TYPES_FD_SET): Define and use, as in <winsock.h>
11+ [!_WINSOCK_ANOMALOUS_TYPEDEFS] (FD_SET): Declare function, not type.
12+ [!_WINSOCK_ANOMALOUS_TYPEDEFS] (PFD_SET, LPFD_SET): Suppress typedefs.
13+ (FD_SET, FD_ISSET, FD_CLR, FD_ZERO): Reimplement, as in <winsock.h>
14+ (FD_READ_BIT, FD_WRITE_BIT, FD_OOB_BIT, FD_ACCEPT_BIT)
15+ (FD_CONNECT_BIT, FD_CLOSE_BIT, FD_QOS_BIT, FD_GROUP_QOS_BIT)
16+ (FD_ROUTING_INTERFACE_CHANGE_BIT, FD_ADDRESS_LIST_CHANGE_BIT)
17+ (FD_MAX_EVENTS): Enumerate them, as in <winsock.h>
18+ [!(defined __INSIDE_CYGWIN__ || defined __INSIDE_MSYS__)]: Recast...
19+ [!defined __INSIDE_MSYS__]: ...as this, throughout.
20+ (gethostname): Update function prototype, adding...
21+ (WINSOCK_API_LINKAGE): ...this DLL import control attribute.
22+
23+ * include/ws2spi.h: Tidy layout; assert copyright.
24+ [_BEGIN_C_DECLS, _END_C_DECLS]: Use them, as appropriate.
25+ (LPFD_SET): Delete all type references; use...
26+ (fd_set *): ...this instead.
27+
128 2017-11-14 Keith Marshall <keith@users.osdn.me>
229
330 Establish default selection for WinSock API declaration.
--- a/w32api/include/winsock.h
+++ b/w32api/include/winsock.h
@@ -496,20 +496,10 @@ struct sockproto
496496
497497 #define SOL_SOCKET 0xFFFF
498498
499-#ifndef _WINSOCK2_H
500-/* FIXME: Is this behaviour correct?
501- * Historically, <winsock.h> defined SOMAXCONN unconditionally, with a
502- * value of 5. However, <winsock2.h> defines it, using a significantly
503- * different value, only when compiling native Windows code, and doesn't
504- * define it at all, when compiling for Cygwin or MSYS. To accommodate
505- * this difference in philosophy, we must now suppress this definition
506- * in <winsock.h>, when <winsock.h> has been included by <winsock2.h>
507- */
508-#define SOMAXCONN 5
509-#endif /* !_WINSOCK2_H */
510-
511499 #ifndef __INSIDE_MSYS__
512500
501+#define SOMAXCONN 5
502+
513503 #define MSG_OOB 1
514504 #define MSG_PEEK 2
515505 #define MSG_DONTROUTE 4
--- a/w32api/include/winsock2.h
+++ b/w32api/include/winsock2.h
@@ -39,6 +39,7 @@
3939 *
4040 */
4141 #if !(defined _WINSOCK2_H || defined _WINSOCK_H)
42+#pragma GCC system_header
4243 #define _WINSOCK2_H
4344
4445 /* WinSock v2 deprecates several features, which are standard
@@ -49,7 +50,6 @@
4950 #define __WINSOCK2_DEPRECATED __MINGW_ATTRIB_DEPRECATED
5051
5152 #define _WINSOCK_H /* to prevent later inclusion of winsock.h */
52-#pragma GCC system_header
5353
5454 #define _GNU_H_WINDOWS32_SOCKETS
5555 #define __WINSOCK_H_SOURCED__ 1
@@ -59,8 +59,6 @@
5959 #include <sys/bsdtypes.h>
6060 #include <sys/time.h>
6161
62-#undef __WINSOCK_H_SOURCED__
63-
6462 #ifndef WINSOCK_API_LINKAGE
6563 #ifdef __W32API_USE_DLLIMPORT__
6664 #define WINSOCK_API_LINKAGE DECLSPEC_IMPORT
@@ -69,6 +67,17 @@
6967 #endif
7068 #endif
7169
70+#if ! defined _USE_SYS_TYPES_FD_SET && defined USE_SYS_TYPES_FD_SET
71+/* Originally defined by the deprecated name, USE_SYS_TYPES_FD_SET, users
72+ * may specify this to suppress warnings, in the event that (incompatible)
73+ * fd_set manipulation macros may have been inherited from <sys/types.h>;
74+ * accommodate use of the deprecated feature test name.
75+ */
76+#warning "Feature test macro USE_SYS_TYPES_FD_SET is deprecated."
77+#warning "Use the _USE_SYS_TYPES_FD_SET feature test macro instead."
78+#define _USE_SYS_TYPES_FD_SET 1
79+#endif
80+
7281 _BEGIN_C_DECLS
7382
7483 /* Names common to Winsock1.1 and Winsock2
@@ -95,61 +104,87 @@ struct fd_set
95104 SOCKET fd_array[FD_SETSIZE];
96105 } fd_set;
97106
98-int PASCAL __WSAFDIsSet (SOCKET, fd_set *);
107+#ifndef FD_ISSET
108+int FD_ISSET (SOCKET, fd_set *);
109+#define FD_ISSET( __fd, __set ) __FD_ISSET ((__fd), (__set))
99110
100-#ifndef FD_CLR
101-#define FD_CLR( fd, set ) do \
102- { u_int __i; \
103- for (__i = 0; __i < ((fd_set *)(set))->fd_count ; __i++) \
104- { if (((fd_set *)(set))->fd_array[__i] == (fd)) \
105- { while (__i < ((fd_set *)(set))->fd_count-1) \
106- { ((fd_set *)(set))->fd_array[__i] \
107- = ((fd_set *)(set))->fd_array[__i + 1]; __i++; \
108- } \
109- ((fd_set *)(set))->fd_count--; \
110- break; \
111- } \
112- } \
113- } while (0)
114-#endif /* ! defined FD_CLR */
111+/* Microsoft provide this library function equivalent of the FD_ISSET
112+ * macro, and erroneously claim that it is neccessary to implement the
113+ * macro. We could just as easily implement it entirely inline...
114+ */
115+int PASCAL __WSAFDIsSet (SOCKET, fd_set *);
116+/* ...but, given the availability of the library function, we may just
117+ * as well use it.
118+ */
119+__CRT_ALIAS int __FD_ISSET( SOCKET __fd, fd_set *__set )
120+{ return __WSAFDIsSet (__fd, __set); }
121+#endif /* ! defined FD_ISSET */
115122
116123 #ifndef FD_SET
117-/* FIXME: this differs from the original definition in <winsock.h>, and also
118- * from the corresponding definition in Cygwin's <sys/types.h>, (which isn't
119- * compatible with the WinSock fd_set type); which is correct?
124+#if !_WINSOCK_ANOMALOUS_TYPEDEFS
125+/* WinSock is intended to mimic the Berkeley Sockets API, for which
126+ * POSIX.1 provides a reference specification; this states that FD_SET
127+ * may be implemented as either a macro, or as a function. The reference
128+ * <winsock.h> implementation at http://www.sockets.com/winsock.htm#WinsockH
129+ * includes a typedef for FD_SET, which a) conflicts with the latter POSIX.1
130+ * provision, and b) creates potential confusion with the former. Thus, we
131+ * prefer to conform with POSIX.1 functional semantics, and recommend that
132+ * users avoid the potentially confusing FD_SET typedefs, so allowing us
133+ * to provide this function prototype:
134+ */
135+void FD_SET (SOCKET, fd_set *);
136+
137+#else /* _WINSOCK_ANOMALOUS_TYPEDEFS */
138+/* However, for users who insist on eschewing standard C/C++ syntax, and
139+ * for whatever reason must use FD_SET as a data type, instead of correctly
140+ * referring to fd_set, or for pointer references, use PFD_SET or LPFD_SET
141+ * instead of standard fd_set * references, we make these anomalous types
142+ * visible, when the _WINSOCK_ANOMALOUS_TYPEDEFS feature test macro is
143+ * defined with a non-zero value.
120144 */
121-#define FD_SET( fd, set ) do \
122- { u_int __i; \
123- for (__i = 0; __i < ((fd_set *)(set))->fd_count ; __i++) \
124- if (((fd_set *)(set))->fd_array[__i] == (fd)) break; \
125- if (__i == ((fd_set *)(set))->fd_count) \
126- { if (((fd_set *)(set))->fd_count < FD_SETSIZE) \
127- { ((fd_set *)(set))->fd_array[__i] = (fd); \
128- ((fd_set *)(set))->fd_count++; \
129- } \
130- } \
131- } while (0)
145+#warning "FD_SET, PFD_SET, and LPFD_SET data types are non-portable."
146+#warning "Use portable fd_set, and fd_set * type references instead."
147+
148+typedef struct fd_set FD_SET, *PFD_SET, *LPFD_SET;
149+#endif
150+#define FD_SET( __fd, __set ) __FD_SET ((__fd), (__set))
151+__CRT_ALIAS void __FD_SET (SOCKET __fd, fd_set *__set)
152+{ if( (__set->fd_count < FD_SETSIZE) && ! FD_ISSET (__fd, __set) )
153+ __set->fd_array[__set->fd_count++] = __fd;
154+}
132155 #endif /* ! defined FD_SET */
133156
157+#ifndef FD_CLR
158+void FD_CLR (SOCKET, fd_set *);
159+#define FD_CLR( __fd, __set ) __FD_CLR ((__fd), (__set))
160+__CRT_ALIAS void __FD_CLR (SOCKET __fd, fd_set *__set)
161+{ u_int __m, __n; for (__m = __n = 0; __n < __set->fd_count; __n++)
162+ { if (__fd != __set->fd_array[__n])
163+ { if (__m < __n) __set->fd_array[__m] = __set->fd_array[__n];
164+ ++__m;
165+ }
166+ } __set->fd_count = __m;
167+}
168+#endif /* ! defined FD_CLR */
169+
134170 #ifndef FD_ZERO
135-#define FD_ZERO( set ) (((fd_set *)(set))->fd_count = 0)
171+void FD_ZERO (fd_set *);
172+#define FD_ZERO( __set ) __FD_ZERO (__set)
173+__CRT_ALIAS void __FD_ZERO (fd_set *__set)
174+{ __set->fd_count = 0; }
136175 #endif /* ! defined FD_ZERO */
137176
138-#ifndef FD_ISSET
139-#define FD_ISSET( fd, set ) __WSAFDIsSet((SOCKET)(fd), (fd_set *)(set))
140-#endif /* ! defined FD_ISSET */
141-
142-#elif ! defined USE_SYS_TYPES_FD_SET
177+#elif ! defined _USE_SYS_TYPES_FD_SET
143178 /* Definitions from <sys/types.h> probably aren't what the user wants;
144179 * if they know what they are doing, and they are sure that this really
145- * is what they want, then they may enable the USE_SYS_TYPES_FD_SET
180+ * is what they want, then they may enable the _USE_SYS_TYPES_FD_SET
146181 * feature test macro, to suppress this warning.
147182 */
148183 #warning "fd_set and associated macros have been defined in <sys/types.h>"
149184 #warning "Your <sys/types.h> may cause runtime problems with W32 sockets."
150185 #endif /* !_SYS_TYPES_FD_SET */
151186
152-#if ! (defined __INSIDE_CYGWIN__ || defined __INSIDE_MSYS__)
187+#ifndef __INSIDE_MSYS__
153188
154189 struct hostent
155190 { char *h_name;
@@ -165,7 +200,7 @@ struct linger
165200 u_short l_linger;
166201 };
167202
168-#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
203+#endif /* !__INSIDE_MSYS__ */
169204
170205 #define IOCPARM_MASK 0x7F
171206 #define IOC_VOID 0x20000000
@@ -173,7 +208,7 @@ struct linger
173208 #define IOC_IN 0x80000000
174209 #define IOC_INOUT (IOC_IN | IOC_OUT)
175210
176-#if ! (defined __INSIDE_CYGWIN__ || defined __INSIDE_MSYS__)
211+#ifndef __INSIDE_MSYS__
177212
178213 #define _IO(x,y) (IOC_VOID|((x)<<8)|(y))
179214 #define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
@@ -181,7 +216,7 @@ struct linger
181216
182217 #define FIONBIO _IOW('f', 126, u_long)
183218
184-#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
219+#endif /* !__INSIDE_MSYS__ */
185220
186221 #define FIONREAD _IOR('f', 127, u_long)
187222 #define FIOASYNC _IOW('f', 125, u_long)
@@ -191,7 +226,7 @@ struct linger
191226 #define SIOCGLOWAT _IOR('s', 3, u_long)
192227 #define SIOCATMARK _IOR('s', 7, u_long)
193228
194-#if ! ( defined __INSIDE_CYGWIN__ || defined __INSIDE_MSYS__)
229+#ifndef __INSIDE_MSYS__
195230
196231 struct netent
197232 { char *n_name;
@@ -213,7 +248,7 @@ struct protoent
213248 short p_proto;
214249 };
215250
216-#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
251+#endif /* !__INSIDE_MSYS__ */
217252
218253 #define IPPROTO_IP 0
219254 #define IPPROTO_ICMP 1
@@ -228,7 +263,8 @@ struct protoent
228263 #define IPPROTO_RAW 255
229264 #define IPPROTO_MAX 256
230265
231-/* IPv6 options */
266+/* IPv6 options: these are unsupported, prior to Winsock v2.
267+ */
232268 #define IPPROTO_HOPOPTS 0 /* IPv6 Hop-by-Hop options */
233269 #define IPPROTO_IPV6 41 /* IPv6 header */
234270 #define IPPROTO_ROUTING 43 /* IPv6 Routing header */
@@ -323,7 +359,7 @@ struct WSAData
323359 char *lpVendorInfo;
324360 } WSADATA, *LPWSADATA;
325361
326-#if ! (defined __INSIDE_CYGWIN__ || defined __INSIDE_MSYS__)
362+#ifndef __INSIDE_MSYS__
327363
328364 #define IP_OPTIONS 1
329365 #define SO_DEBUG 1
@@ -348,7 +384,7 @@ struct WSAData
348384 #define SO_ERROR 0x1007
349385 #define SO_TYPE 0x1008
350386
351-#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
387+#endif /* !__INSIDE_MSYS__ */
352388
353389 #define INVALID_SOCKET (SOCKET)(~0)
354390 #define SOCKET_ERROR (-1)
@@ -457,7 +493,7 @@ struct sockproto
457493
458494 #define SOL_SOCKET 0xFFFF
459495
460-#if ! (defined __INSIDE_CYGWIN__ || defined __INSIDE_MSYS__)
496+#ifndef __INSIDE_MSYS__
461497
462498 #define SOMAXCONN 0x7FFFFFFF /* (5) in WinSock1.1 */
463499
@@ -465,42 +501,64 @@ struct sockproto
465501 #define MSG_PEEK 2
466502 #define MSG_DONTROUTE 4
467503
468-#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
504+#endif /* !__INSIDE_MSYS__ */
469505
470506 #define MSG_MAXIOVLEN 16
471507 #define MSG_PARTIAL 0x8000
472508 #define MAXGETHOSTSTRUCT 1024
473509
474-#define FD_READ_BIT 0
475-#define FD_READ (1 << FD_READ_BIT)
476-#define FD_WRITE_BIT 1
477-#define FD_WRITE (1 << FD_WRITE_BIT)
478-#define FD_OOB_BIT 2
479-#define FD_OOB (1 << FD_OOB_BIT)
480-#define FD_ACCEPT_BIT 3
481-#define FD_ACCEPT (1 << FD_ACCEPT_BIT)
482-#define FD_CONNECT_BIT 4
483-#define FD_CONNECT (1 << FD_CONNECT_BIT)
484-#define FD_CLOSE_BIT 5
485-#define FD_CLOSE (1 << FD_CLOSE_BIT)
486-/* WinSock v1.1 defines no further events, beyond FD_CLOSE (32);
487- * the following are specific to WinSock v2.
510+enum
511+{ /* Enumerate the flags used to represent the events which may be
512+ * detected on any socket, when monitored via an fd_set array.
513+ */
514+ FD_READ_BIT = 0,
515+# define FD_READ (1 << FD_READ_BIT)
516+
517+ FD_WRITE_BIT,
518+# define FD_WRITE (1 << FD_WRITE_BIT)
519+
520+ FD_OOB_BIT,
521+# define FD_OOB (1 << FD_OOB_BIT)
522+
523+ FD_ACCEPT_BIT,
524+# define FD_ACCEPT (1 << FD_ACCEPT_BIT)
525+
526+ FD_CONNECT_BIT,
527+# define FD_CONNECT (1 << FD_CONNECT_BIT)
528+
529+ FD_CLOSE_BIT,
530+# define FD_CLOSE (1 << FD_CLOSE_BIT)
531+
532+# ifdef _WINSOCK2_H
533+/* WinSock v1.1 defines no further events, beyond FD_CLOSE (1 << 5 = 32).
534+ * The following are specific to WinSock v2; for convenience, they may be
535+ * enumerated here, but they are exposed only when <winsock.h> is included
536+ * indirectly, by way of including <winsock2.h>
488537 */
489-#define FD_QOS_BIT 6
490-#define FD_QOS (1 << FD_QOS_BIT)
491-#define FD_GROUP_QOS_BIT 7
492-#define FD_GROUP_QOS (1 << FD_GROUP_QOS_BIT)
493-#define FD_ROUTING_INTERFACE_CHANGE_BIT 8
494-#define FD_ROUTING_INTERFACE_CHANGE (1 << FD_ROUTING_INTERFACE_CHANGE_BIT)
495-#define FD_ADDRESS_LIST_CHANGE_BIT 9
496-#define FD_ADDRESS_LIST_CHANGE (1 << FD_ADDRESS_LIST_CHANGE_BIT)
497-
498-#define FD_MAX_EVENTS 10
499-#define FD_ALL_EVENTS ((1 << FD_MAX_EVENTS) - 1)
538+ FD_QOS_BIT,
539+# define FD_QOS (1 << FD_QOS_BIT)
540+
541+ FD_GROUP_QOS_BIT,
542+# define FD_GROUP_QOS (1 << FD_GROUP_QOS_BIT)
543+
544+ FD_ROUTING_INTERFACE_CHANGE_BIT,
545+# define FD_ROUTING_INTERFACE_CHANGE (1 << FD_ROUTING_INTERFACE_CHANGE_BIT)
546+
547+ FD_ADDRESS_LIST_CHANGE_BIT,
548+# define FD_ADDRESS_LIST_CHANGE (1 << FD_ADDRESS_LIST_CHANGE_BIT)
549+
550+# endif /* _WINSOCK2_H */
551+ /* Regardless of WinSock version, FD_MAX_EVENTS represents the first
552+ * unused flag bit, whence we may deduce FD_ALL_EVENTS, as a mask for
553+ * all supported event flags, specific to the WinSock version in use.
554+ */
555+ FD_MAX_EVENTS,
556+# define FD_ALL_EVENTS ((1 << FD_MAX_EVENTS) - 1)
557+};
500558
501559 #define WSANO_ADDRESS WSANO_DATA
502560
503-#if ! (defined __INSIDE_CYGWIN__ || defined __INSIDE_MSYS__)
561+#ifndef __INSIDE_MSYS__
504562
505563 #define h_errno WSAGetLastError()
506564 #define HOST_NOT_FOUND WSAHOST_NOT_FOUND
@@ -509,7 +567,7 @@ struct sockproto
509567 #define NO_DATA WSANO_DATA
510568 #define NO_ADDRESS WSANO_ADDRESS
511569
512-#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
570+#endif /* !__INSIDE_MSYS__ */
513571
514572 WINSOCK_API_LINKAGE SOCKET PASCAL accept (SOCKET, struct sockaddr *, int *);
515573
@@ -542,7 +600,6 @@ WINSOCK_API_LINKAGE DECLARE_STDCALL_P (struct servent *) getservbyname (const c
542600 WINSOCK_API_LINKAGE DECLARE_STDCALL_P (struct protoent *) getprotobynumber (int);
543601 WINSOCK_API_LINKAGE DECLARE_STDCALL_P (struct protoent *) getprotobyname (const char *);
544602
545-
546603 typedef SOCKET (PASCAL *LPFN_ACCEPT) (SOCKET, struct sockaddr *, int *);
547604
548605 typedef int (PASCAL *LPFN_BIND) (SOCKET, const struct sockaddr *, int);
@@ -629,7 +686,7 @@ typedef HANDLE (PASCAL *LPFN_WSAASYNCGETHOSTBYADDR) (HWND, u_int, const char*, i
629686 typedef int (PASCAL *LPFN_WSACANCELASYNCREQUEST) (HANDLE);
630687 typedef int (PASCAL *LPFN_WSAASYNCSELECT) (SOCKET, HWND, u_int, long);
631688
632-#if ! (defined __INSIDE_CYGWIN__ || defined __INSIDE_MSYS__)
689+#ifndef __INSIDE_MSYS__
633690
634691 WINSOCK_API_LINKAGE u_long PASCAL htonl (u_long);
635692 WINSOCK_API_LINKAGE u_long PASCAL ntohl (u_long);
@@ -637,9 +694,9 @@ WINSOCK_API_LINKAGE u_short PASCAL htons (u_short);
637694 WINSOCK_API_LINKAGE u_short PASCAL ntohs (u_short);
638695 WINSOCK_API_LINKAGE int PASCAL select (int nfds, fd_set *, fd_set *, fd_set *, const struct timeval *);
639696
640-#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
697+#endif /* !__INSIDE_MSYS__ */
641698
642-int PASCAL gethostname (char *, int);
699+WINSOCK_API_LINKAGE int PASCAL gethostname (char *, int);
643700
644701 #define WSAMAKEASYNCREPLY(b,e) MAKELONG(b,e)
645702 #define WSAMAKESELECTREPLY(e,error) MAKELONG(e,error)
@@ -653,12 +710,16 @@ typedef struct sockaddr_storage SOCKADDR_STORAGE, *PSOCKADDR_STORAGE;
653710 typedef struct sockaddr_in SOCKADDR_IN, *PSOCKADDR_IN, *LPSOCKADDR_IN;
654711 typedef struct linger LINGER, *PLINGER, *LPLINGER;
655712 typedef struct in_addr IN_ADDR, *PIN_ADDR, *LPIN_ADDR;
656-typedef struct fd_set FD_SET, *PFD_SET, *LPFD_SET;
657713 typedef struct hostent HOSTENT, *PHOSTENT, *LPHOSTENT;
658714 typedef struct servent SERVENT, *PSERVENT, *LPSERVENT;
659715 typedef struct protoent PROTOENT, *PPROTOENT, *LPPROTOENT;
660716 typedef struct timeval TIMEVAL, *PTIMEVAL, *LPTIMEVAL;
661717
718+_END_C_DECLS
719+
720+
721+#undef __WINSOCK_H_SOURCED__
722+
662723 /* winsock2 additions */
663724 #define __WINSOCK2_H_SOURCED__
664725
@@ -670,6 +731,8 @@ typedef struct timeval TIMEVAL, *PTIMEVAL, *LPTIMEVAL;
670731 */
671732 #include "nspapi.h"
672733
734+_BEGIN_C_DECLS
735+
673736 #define ADDR_ANY INADDR_ANY
674737
675738 #define IN_CLASSD(i) (((long)(i) & 0xF0000000) == 0xE0000000)
--- a/w32api/include/ws2spi.h
+++ b/w32api/include/ws2spi.h
@@ -1,202 +1,305 @@
11 /*
22 * ws2spi.h
33 *
4- * Winsock 2 Service Provider Interface.
4+ * WinSock v2 Service Provider Interface.
55 *
6+ * $Id$
67 *
7- * THIS SOFTWARE IS NOT COPYRIGHTED
8+ * Written by Casper S. Hornstrup <chorns@users.sourceforge.net>
9+ * Copyright (C) 2002-2004, 2006, 2017, MinGW.org Project
810 *
9- * This source code is offered for use in the public domain. You may
10- * use, modify or distribute it freely.
1111 *
12- * This code is distributed in the hope that it will be useful but
13- * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
14- * DISCLAIMED. This includes but is not limited to warranties of
15- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12+ * Permission is hereby granted, free of charge, to any person obtaining a
13+ * copy of this software and associated documentation files (the "Software"),
14+ * to deal in the Software without restriction, including without limitation
15+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
16+ * and/or sell copies of the Software, and to permit persons to whom the
17+ * Software is furnished to do so, subject to the following conditions:
18+ *
19+ * The above copyright notice and this permission notice (including the next
20+ * paragraph) shall be included in all copies or substantial portions of the
21+ * Software.
22+ *
23+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29+ * DEALINGS IN THE SOFTWARE.
1630 *
1731 */
1832 #ifndef _WS2SPI_H
19-#define _WS2SPI_H
20-#if __GNUC__ >= 3
2133 #pragma GCC system_header
22-#endif
34+#define _WS2SPI_H
2335
2436 #include <winsock2.h>
2537
26-#ifdef __cplusplus
27-extern "C" {
28-#endif /* __cplusplus */
38+_BEGIN_C_DECLS
2939
30-#define WSPAPI WSAAPI
31-#define WSPDESCRIPTION_LEN 255
40+#define WSPAPI WSAAPI
41+#define WSPDESCRIPTION_LEN 255
3242
3343 #ifndef RC_INVOKED
3444
35-typedef struct WSPData {
36- WORD wVersion;
37- WORD wHighVersion;
38- WCHAR szDescription[WSPDESCRIPTION_LEN+1];
45+typedef
46+struct WSPData
47+{ WORD wVersion;
48+ WORD wHighVersion;
49+ WCHAR szDescription[WSPDESCRIPTION_LEN+1];
3950 } WSPDATA, FAR *LPWSPDATA;
40-typedef struct _WSATHREADID {
41- HANDLE ThreadHandle;
42- DWORD Reserved;
51+
52+typedef
53+struct _WSATHREADID
54+{ HANDLE ThreadHandle;
55+ DWORD Reserved;
4356 } WSATHREADID, FAR *LPWSATHREADID;
4457
45-typedef BOOL (CALLBACK FAR *LPBLOCKINGCALLBACK)(DWORD);
46-typedef VOID (CALLBACK FAR *LPWSAUSERAPC)(DWORD);
47-
48-/* Prototypes for service provider procedure table */
49-typedef SOCKET (WSPAPI *LPWSPACCEPT)(SOCKET,LPSOCKADDR,LPINT,LPCONDITIONPROC,DWORD,LPINT);
50-typedef INT (WSPAPI *LPWSPADDRESSTOSTRING)(LPSOCKADDR,DWORD,LPWSAPROTOCOL_INFOW,LPWSTR,LPDWORD,LPINT);
51-typedef INT (WSPAPI *LPWSPASYNCSELECT)(SOCKET,HWND,UINT,LONG,LPINT);
52-typedef INT (WSPAPI *LPWSPBIND)(SOCKET,const struct sockaddr*,INT,LPINT);
53-typedef INT (WSPAPI *LPWSPCANCELBLOCKINGCALL)(LPINT);
54-typedef INT (WSPAPI *LPWSPCLEANUP)(LPINT);
55-typedef INT (WSPAPI *LPWSPCLOSESOCKET)(SOCKET,LPINT);
56-typedef INT (WSPAPI *LPWSPCONNECT)(SOCKET,const struct sockaddr*,INT,LPWSABUF,LPWSABUF,LPQOS,LPQOS,LPINT);
57-typedef INT (WSPAPI *LPWSPDUPLICATESOCKET)(SOCKET,DWORD,LPWSAPROTOCOL_INFOW,LPINT);
58-typedef INT (WSPAPI *LPWSPENUMNETWORKEVENTS)(SOCKET,WSAEVENT,LPWSANETWORKEVENTS,LPINT);
59-typedef INT (WSPAPI *LPWSPEVENTSELECT)(SOCKET,WSAEVENT,LONG,LPINT);
60-typedef BOOL (WSPAPI *LPWSPGETOVERLAPPEDRESULT)(SOCKET,LPWSAOVERLAPPED,LPDWORD,BOOL,LPDWORD,LPINT);
61-typedef INT (WSPAPI *LPWSPGETPEERNAME)(SOCKET,LPSOCKADDR,LPINT,LPINT);
62-typedef BOOL (WSPAPI *LPWSPGETQOSBYNAME)(SOCKET,LPWSABUF,LPQOS,LPINT);
63-typedef INT (WSPAPI *LPWSPGETSOCKNAME)(SOCKET,LPSOCKADDR,LPINT,LPINT);
64-typedef INT (WSPAPI *LPWSPGETSOCKOPT)(SOCKET,INT,INT,CHAR FAR*,LPINT,LPINT);
65-typedef INT (WSPAPI *LPWSPIOCTL)(SOCKET,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,
66- LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE,LPWSATHREADID,LPINT);
67-typedef SOCKET (WSPAPI *LPWSPJOINLEAF)(SOCKET,const struct sockaddr*,INT,LPWSABUF,LPWSABUF,LPQOS,LPQOS,DWORD,LPINT);
68-typedef INT (WSPAPI *LPWSPLISTEN)(SOCKET,INT,LPINT);
69-typedef INT (WSPAPI *LPWSPRECV)(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,
70-LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE,LPWSATHREADID,LPINT);
71-typedef INT (WSPAPI *LPWSPRECVDISCONNECT)(SOCKET,LPWSABUF,LPINT);
72-typedef INT (WSPAPI *LPWSPRECVFROM)(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,LPSOCKADDR,
73-LPINT,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE,LPWSATHREADID,LPINT);
74-typedef INT (WSPAPI *LPWSPSELECT)(INT,LPFD_SET,LPFD_SET,LPFD_SET,CONST TIMEVAL*,LPINT);
75-typedef INT (WSPAPI *LPWSPSEND)(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,
76-LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE,LPWSATHREADID,LPINT);
77-typedef INT (WSPAPI *LPWSPSENDDISCONNECT)(SOCKET,LPWSABUF,LPINT);
78-typedef INT (WSPAPI *LPWSPSENDTO)(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,const struct sockaddr*,
79- INT,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE,LPWSATHREADID,LPINT);
80-typedef INT (WSPAPI *LPWSPSETSOCKOPT)(SOCKET,INT,INT,CONST CHAR FAR*,INT,LPINT);
81-typedef INT (WSPAPI *LPWSPSHUTDOWN)(SOCKET,INT,LPINT);
82-typedef SOCKET (WSPAPI *LPWSPSOCKET)(INT,INT,INT,LPWSAPROTOCOL_INFOW,GROUP,DWORD,LPINT);
83-typedef INT (WSPAPI *LPWSPSTRINGTOADDRESS)(LPWSTR,INT,LPWSAPROTOCOL_INFOW,LPSOCKADDR,LPINT,LPINT);
84-
85-/* Service provider procedure table */
86-typedef struct _WSPPROC_TABLE {
87- LPWSPACCEPT lpWSPAccept;
88- LPWSPADDRESSTOSTRING lpWSPAddressToString;
89- LPWSPASYNCSELECT lpWSPAsyncSelect;
90- LPWSPBIND lpWSPBind;
91- LPWSPCANCELBLOCKINGCALL lpWSPCancelBlockingCall;
92- LPWSPCLEANUP lpWSPCleanup;
93- LPWSPCLOSESOCKET lpWSPCloseSocket;
94- LPWSPCONNECT lpWSPConnect;
95- LPWSPDUPLICATESOCKET lpWSPDuplicateSocket;
96- LPWSPENUMNETWORKEVENTS lpWSPEnumNetworkEvents;
97- LPWSPEVENTSELECT lpWSPEventSelect;
98- LPWSPGETOVERLAPPEDRESULT lpWSPGetOverlappedResult;
99- LPWSPGETPEERNAME lpWSPGetPeerName;
100- LPWSPGETSOCKNAME lpWSPGetSockName;
101- LPWSPGETSOCKOPT lpWSPGetSockOpt;
102- LPWSPGETQOSBYNAME lpWSPGetQOSByName;
103- LPWSPIOCTL lpWSPIoctl;
104- LPWSPJOINLEAF lpWSPJoinLeaf;
105- LPWSPLISTEN lpWSPListen;
106- LPWSPRECV lpWSPRecv;
107- LPWSPRECVDISCONNECT lpWSPRecvDisconnect;
108- LPWSPRECVFROM lpWSPRecvFrom;
109- LPWSPSELECT lpWSPSelect;
110- LPWSPSEND lpWSPSend;
111- LPWSPSENDDISCONNECT lpWSPSendDisconnect;
112- LPWSPSENDTO lpWSPSendTo;
113- LPWSPSETSOCKOPT lpWSPSetSockOpt;
114- LPWSPSHUTDOWN lpWSPShutdown;
115- LPWSPSOCKET lpWSPSocket;
116- LPWSPSTRINGTOADDRESS lpWSPStringToAddress;
117-} WSPPROC_TABLE, FAR* LPWSPPROC_TABLE;
118-
119-/* Prototypes for service provider upcall procedure table */
120-typedef BOOL (WSPAPI *LPWPUCLOSEEVENT)(WSAEVENT,LPINT);
121-typedef INT (WSPAPI *LPWPUCLOSESOCKETHANDLE)(SOCKET,LPINT);
122-typedef INT (WSPAPI *LPWPUCLOSETHREAD)(LPWSATHREADID,LPINT);
123-typedef WSAEVENT (WSPAPI *LPWPUCREATEEVENT)(LPINT);
124-typedef SOCKET (WSPAPI *LPWPUCREATESOCKETHANDLE)(DWORD,DWORD,LPINT);
125-typedef SOCKET (WSPAPI *LPWPUFDISSET)(SOCKET,LPFD_SET);
126-typedef INT (WSPAPI *LPWPUGETPROVIDERPATH)(LPGUID,LPWSTR,LPINT,LPINT);
127-typedef SOCKET (WSPAPI *LPWPUMODIFYIFSHANDLE)(DWORD,SOCKET,LPINT);
128-typedef INT (WSPAPI *LPWPUOPENCURRENTTHREAD)(LPWSATHREADID,LPINT);
129-typedef BOOL (WSPAPI *LPWPUPOSTMESSAGE)(HWND,UINT,WPARAM,LPARAM);
130-typedef INT (WSPAPI *LPWPUQUERYBLOCKINGCALLBACK)(DWORD,LPBLOCKINGCALLBACK FAR*,LPDWORD,LPINT);
131-typedef INT (WSPAPI *LPWPUQUERYSOCKETHANDLECONTEXT)(SOCKET,LPDWORD,LPINT);
132-typedef INT (WSPAPI *LPWPUQUEUEAPC)(LPWSATHREADID,LPWSAUSERAPC,DWORD,LPINT);
133-typedef BOOL (WSPAPI *LPWPURESETEVENT)(WSAEVENT,LPINT);
134-typedef BOOL (WSPAPI *LPWPUSETEVENT)(WSAEVENT,LPINT);
135-/* Available only directly from the DLL */
136-typedef INT (WSPAPI *LPWPUCOMPLETEOVERLAPPEDREQUEST)(SOCKET,LPWSAOVERLAPPED,DWORD,DWORD,LPINT);
137-
138-/* Service Provider upcall table */
139-typedef struct _WSPUPCALLTABLE {
140- LPWPUCLOSEEVENT lpWPUCloseEvent;
141- LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle;
142- LPWPUCREATEEVENT lpWPUCreateEvent;
143- LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle;
144- LPWPUFDISSET lpWPUFDIsSet;
145- LPWPUGETPROVIDERPATH lpWPUGetProviderPath;
146- LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle;
147- LPWPUPOSTMESSAGE lpWPUPostMessage;
148- LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback;
149- LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext;
150- LPWPUQUEUEAPC lpWPUQueueApc;
151- LPWPURESETEVENT lpWPUResetEvent;
152- LPWPUSETEVENT lpWPUSetEvent;
153- LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread;
154- LPWPUCLOSETHREAD lpWPUCloseThread;
155-} WSPUPCALLTABLE, FAR* LPWSPUPCALLTABLE;
156-
157-typedef INT (WSPAPI *LPWSPSTARTUP)(WORD,LPWSPDATA,LPWSAPROTOCOL_INFOW,WSPUPCALLTABLE,LPWSPPROC_TABLE);
158-
159-/* Prototypes for service provider namespace procedure table */
160-typedef INT (WSPAPI *LPNSPCLEANUP)(LPGUID);
161-typedef INT (WSPAPI *LPNSPGETSERVICECLASSINFO)(LPGUID,LPDWORD,LPWSASERVICECLASSINFOW);
162-typedef INT (WSPAPI *LPNSPINSTALLSERVICECLASS)(LPGUID,LPWSASERVICECLASSINFOW);
163-typedef INT (WSPAPI *LPNSPLOOKUPSERVICEBEGIN)(LPGUID,LPWSAQUERYSETW,LPWSASERVICECLASSINFOW,DWORD,LPHANDLE);
164-typedef INT (WSPAPI *LPNSPLOOKUPSERVICEEND)(HANDLE);
165-typedef INT (WSPAPI *LPNSPLOOKUPSERVICENEXT)(HANDLE,DWORD,LPDWORD,LPWSAQUERYSET);
166-typedef INT (WSPAPI *LPNSPREMOVESERVICECLASS)(LPGUID,LPGUID);
167-typedef INT (WSPAPI *LPNSPSETSERVICE)(LPGUID,LPWSASERVICECLASSINFOW,LPWSAQUERYSETW,WSAESETSERVICEOP,DWORD);
168-
169-typedef struct _NSP_ROUTINE {
170- DWORD cbSize;
171- DWORD dwMajorVersion;
172- DWORD dwMinorVersion;
173- LPNSPCLEANUP NSPCleanup;
174- LPNSPLOOKUPSERVICEBEGIN NSPLookupServiceBegin;
175- LPNSPLOOKUPSERVICENEXT NSPLookupServiceNext;
176- LPNSPLOOKUPSERVICEEND NSPLookupServiceEnd;
177- LPNSPSETSERVICE NSPSetService;
178- LPNSPINSTALLSERVICECLASS NSPInstallServiceClass;
179- LPNSPREMOVESERVICECLASS NSPRemoveServiceClass;
180- LPNSPGETSERVICECLASSINFO NSPGetServiceClassInfo;
58+typedef BOOL (CALLBACK FAR *LPBLOCKINGCALLBACK) (DWORD);
59+typedef VOID (CALLBACK FAR *LPWSAUSERAPC) (DWORD);
60+
61+/* Prototypes for functions which may be invoked
62+ * via the Service Provider Procedure Table.
63+ */
64+typedef SOCKET (WSPAPI *LPWSPACCEPT)
65+ ( SOCKET, LPSOCKADDR, LPINT, LPCONDITIONPROC, DWORD, LPINT
66+ );
67+typedef INT (WSPAPI *LPWSPADDRESSTOSTRING)
68+ ( LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOW, LPWSTR, LPDWORD, LPINT
69+ );
70+typedef INT (WSPAPI *LPWSPASYNCSELECT) (SOCKET, HWND, UINT, LONG, LPINT);
71+typedef INT (WSPAPI *LPWSPBIND) (SOCKET, const struct sockaddr *, INT, LPINT);
72+typedef INT (WSPAPI *LPWSPCANCELBLOCKINGCALL) (LPINT);
73+typedef INT (WSPAPI *LPWSPCLEANUP) (LPINT);
74+typedef INT (WSPAPI *LPWSPCLOSESOCKET) (SOCKET, LPINT);
75+
76+typedef INT (WSPAPI *LPWSPCONNECT)
77+ ( SOCKET, const struct sockaddr *, INT, LPWSABUF, LPWSABUF,
78+ LPQOS, LPQOS, LPINT
79+ );
80+typedef INT (WSPAPI *LPWSPDUPLICATESOCKET)
81+ ( SOCKET, DWORD, LPWSAPROTOCOL_INFOW, LPINT
82+ );
83+typedef INT (WSPAPI *LPWSPENUMNETWORKEVENTS)
84+ ( SOCKET, WSAEVENT, LPWSANETWORKEVENTS, LPINT
85+ );
86+typedef INT (WSPAPI *LPWSPEVENTSELECT) (SOCKET, WSAEVENT, LONG, LPINT);
87+
88+typedef BOOL (WSPAPI *LPWSPGETOVERLAPPEDRESULT)
89+ ( SOCKET, LPWSAOVERLAPPED, LPDWORD, BOOL, LPDWORD, LPINT
90+ );
91+typedef INT (WSPAPI *LPWSPGETPEERNAME) (SOCKET, LPSOCKADDR, LPINT, LPINT);
92+typedef BOOL (WSPAPI *LPWSPGETQOSBYNAME) (SOCKET, LPWSABUF, LPQOS, LPINT);
93+typedef INT (WSPAPI *LPWSPGETSOCKNAME) (SOCKET, LPSOCKADDR, LPINT, LPINT);
94+
95+typedef INT (WSPAPI *LPWSPGETSOCKOPT)
96+ ( SOCKET, INT, INT, CHAR FAR *, LPINT, LPINT
97+ );
98+typedef INT (WSPAPI *LPWSPIOCTL)
99+ ( SOCKET, DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPWSAOVERLAPPED,
100+ LPWSAOVERLAPPED_COMPLETION_ROUTINE, LPWSATHREADID, LPINT
101+ );
102+typedef SOCKET (WSPAPI *LPWSPJOINLEAF)
103+ ( SOCKET, const struct sockaddr*, INT, LPWSABUF, LPWSABUF,
104+ LPQOS, LPQOS, DWORD, LPINT
105+ );
106+typedef INT (WSPAPI *LPWSPLISTEN) (SOCKET, INT, LPINT);
107+
108+typedef INT (WSPAPI *LPWSPRECV)
109+ ( SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, LPWSAOVERLAPPED,
110+ LPWSAOVERLAPPED_COMPLETION_ROUTINE, LPWSATHREADID, LPINT
111+ );
112+typedef INT (WSPAPI *LPWSPRECVDISCONNECT) (SOCKET, LPWSABUF, LPINT);
113+
114+typedef INT (WSPAPI *LPWSPRECVFROM)
115+ ( SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, LPSOCKADDR, LPINT,
116+ LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE, LPWSATHREADID,
117+ LPINT
118+ );
119+typedef INT (WSPAPI *LPWSPSELECT)
120+ ( INT, fd_set *, fd_set *, fd_set *, CONST TIMEVAL *, LPINT
121+ );
122+typedef INT (WSPAPI *LPWSPSEND)
123+ ( SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, LPWSAOVERLAPPED,
124+ LPWSAOVERLAPPED_COMPLETION_ROUTINE, LPWSATHREADID, LPINT
125+ );
126+typedef INT (WSPAPI *LPWSPSENDDISCONNECT) (SOCKET, LPWSABUF, LPINT);
127+
128+typedef INT (WSPAPI *LPWSPSENDTO)
129+ ( SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, const struct sockaddr *,
130+ INT, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE,
131+ LPWSATHREADID, LPINT
132+ );
133+typedef INT (WSPAPI *LPWSPSETSOCKOPT)
134+ ( SOCKET, INT, INT, CONST CHAR FAR *, INT, LPINT
135+ );
136+typedef INT (WSPAPI *LPWSPSHUTDOWN) (SOCKET, INT, LPINT);
137+
138+typedef SOCKET (WSPAPI *LPWSPSOCKET)
139+ ( INT, INT, INT, LPWSAPROTOCOL_INFOW, GROUP, DWORD, LPINT
140+ );
141+typedef INT (WSPAPI *LPWSPSTRINGTOADDRESS)
142+ ( LPWSTR, INT, LPWSAPROTOCOL_INFOW, LPSOCKADDR, LPINT, LPINT
143+ );
144+
145+typedef
146+struct _WSPPROC_TABLE
147+{ /* Service Provider Procedure Table
148+ */
149+ LPWSPACCEPT lpWSPAccept;
150+ LPWSPADDRESSTOSTRING lpWSPAddressToString;
151+ LPWSPASYNCSELECT lpWSPAsyncSelect;
152+ LPWSPBIND lpWSPBind;
153+ LPWSPCANCELBLOCKINGCALL lpWSPCancelBlockingCall;
154+ LPWSPCLEANUP lpWSPCleanup;
155+ LPWSPCLOSESOCKET lpWSPCloseSocket;
156+ LPWSPCONNECT lpWSPConnect;
157+ LPWSPDUPLICATESOCKET lpWSPDuplicateSocket;
158+ LPWSPENUMNETWORKEVENTS lpWSPEnumNetworkEvents;
159+ LPWSPEVENTSELECT lpWSPEventSelect;
160+ LPWSPGETOVERLAPPEDRESULT lpWSPGetOverlappedResult;
161+ LPWSPGETPEERNAME lpWSPGetPeerName;
162+ LPWSPGETSOCKNAME lpWSPGetSockName;
163+ LPWSPGETSOCKOPT lpWSPGetSockOpt;
164+ LPWSPGETQOSBYNAME lpWSPGetQOSByName;
165+ LPWSPIOCTL lpWSPIoctl;
166+ LPWSPJOINLEAF lpWSPJoinLeaf;
167+ LPWSPLISTEN lpWSPListen;
168+ LPWSPRECV lpWSPRecv;
169+ LPWSPRECVDISCONNECT lpWSPRecvDisconnect;
170+ LPWSPRECVFROM lpWSPRecvFrom;
171+ LPWSPSELECT lpWSPSelect;
172+ LPWSPSEND lpWSPSend;
173+ LPWSPSENDDISCONNECT lpWSPSendDisconnect;
174+ LPWSPSENDTO lpWSPSendTo;
175+ LPWSPSETSOCKOPT lpWSPSetSockOpt;
176+ LPWSPSHUTDOWN lpWSPShutdown;
177+ LPWSPSOCKET lpWSPSocket;
178+ LPWSPSTRINGTOADDRESS lpWSPStringToAddress;
179+} WSPPROC_TABLE, FAR *LPWSPPROC_TABLE;
180+
181+/* Prototypes for functions which may be invoked via
182+ * the Service Provider Upcall Procedure Table.
183+ */
184+typedef BOOL (WSPAPI *LPWPUCLOSEEVENT) (WSAEVENT, LPINT);
185+typedef INT (WSPAPI *LPWPUCLOSESOCKETHANDLE) (SOCKET, LPINT);
186+typedef INT (WSPAPI *LPWPUCLOSETHREAD) (LPWSATHREADID, LPINT);
187+typedef WSAEVENT (WSPAPI *LPWPUCREATEEVENT) (LPINT);
188+typedef SOCKET (WSPAPI *LPWPUCREATESOCKETHANDLE) (DWORD, DWORD, LPINT);
189+typedef SOCKET (WSPAPI *LPWPUFDISSET) (SOCKET, fd_set *);
190+typedef INT (WSPAPI *LPWPUGETPROVIDERPATH) (LPGUID, LPWSTR, LPINT, LPINT);
191+typedef SOCKET (WSPAPI *LPWPUMODIFYIFSHANDLE) (DWORD, SOCKET, LPINT);
192+typedef INT (WSPAPI *LPWPUOPENCURRENTTHREAD) (LPWSATHREADID, LPINT);
193+typedef BOOL (WSPAPI *LPWPUPOSTMESSAGE) (HWND, UINT, WPARAM, LPARAM);
194+
195+typedef INT (WSPAPI *LPWPUQUERYBLOCKINGCALLBACK)
196+ ( DWORD, LPBLOCKINGCALLBACK FAR *, LPDWORD, LPINT
197+ );
198+typedef INT (WSPAPI *LPWPUQUERYSOCKETHANDLECONTEXT) (SOCKET, LPDWORD, LPINT);
199+
200+typedef INT (WSPAPI *LPWPUQUEUEAPC)
201+ ( LPWSATHREADID, LPWSAUSERAPC, DWORD, LPINT
202+ );
203+typedef BOOL (WSPAPI *LPWPURESETEVENT) (WSAEVENT, LPINT);
204+typedef BOOL (WSPAPI *LPWPUSETEVENT) (WSAEVENT, LPINT);
205+
206+/* Functions matching the following prototype are available
207+ * only directly from the DLL
208+ */
209+typedef INT (WSPAPI *LPWPUCOMPLETEOVERLAPPEDREQUEST)
210+ ( SOCKET, LPWSAOVERLAPPED, DWORD, DWORD, LPINT
211+ );
212+
213+typedef
214+struct _WSPUPCALLTABLE
215+{ /* Service Provider Upcall Table
216+ */
217+ LPWPUCLOSEEVENT lpWPUCloseEvent;
218+ LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle;
219+ LPWPUCREATEEVENT lpWPUCreateEvent;
220+ LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle;
221+ LPWPUFDISSET lpWPUFDIsSet;
222+ LPWPUGETPROVIDERPATH lpWPUGetProviderPath;
223+ LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle;
224+ LPWPUPOSTMESSAGE lpWPUPostMessage;
225+ LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback;
226+ LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext;
227+ LPWPUQUEUEAPC lpWPUQueueApc;
228+ LPWPURESETEVENT lpWPUResetEvent;
229+ LPWPUSETEVENT lpWPUSetEvent;
230+ LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread;
231+ LPWPUCLOSETHREAD lpWPUCloseThread;
232+} WSPUPCALLTABLE, FAR *LPWSPUPCALLTABLE;
233+
234+typedef INT (WSPAPI *LPWSPSTARTUP)
235+ ( WORD, LPWSPDATA, LPWSAPROTOCOL_INFOW, WSPUPCALLTABLE, LPWSPPROC_TABLE
236+ );
237+
238+/* Prototypes for functions which may be invoked via
239+ * the Service Provider Namespace Procedure Table.
240+ */
241+typedef INT (WSPAPI *LPNSPCLEANUP) (LPGUID);
242+
243+typedef INT (WSPAPI *LPNSPGETSERVICECLASSINFO)
244+ ( LPGUID, LPDWORD, LPWSASERVICECLASSINFOW
245+ );
246+typedef INT (WSPAPI *LPNSPINSTALLSERVICECLASS)
247+ ( LPGUID, LPWSASERVICECLASSINFOW
248+ );
249+typedef INT (WSPAPI *LPNSPLOOKUPSERVICEBEGIN)
250+ ( LPGUID, LPWSAQUERYSETW, LPWSASERVICECLASSINFOW, DWORD, LPHANDLE
251+ );
252+typedef INT (WSPAPI *LPNSPLOOKUPSERVICEEND) (HANDLE);
253+typedef INT (WSPAPI *LPNSPLOOKUPSERVICENEXT)
254+ ( HANDLE, DWORD, LPDWORD, LPWSAQUERYSET
255+ );
256+typedef INT (WSPAPI *LPNSPREMOVESERVICECLASS) (LPGUID, LPGUID);
257+
258+typedef INT (WSPAPI *LPNSPSETSERVICE)
259+ ( LPGUID, LPWSASERVICECLASSINFOW, LPWSAQUERYSETW, WSAESETSERVICEOP, DWORD
260+ );
261+
262+typedef
263+struct _NSP_ROUTINE
264+{ /* Service Provider Namespace Procedure Table
265+ */
266+ DWORD cbSize;
267+ DWORD dwMajorVersion;
268+ DWORD dwMinorVersion;
269+ LPNSPCLEANUP NSPCleanup;
270+ LPNSPLOOKUPSERVICEBEGIN NSPLookupServiceBegin;
271+ LPNSPLOOKUPSERVICENEXT NSPLookupServiceNext;
272+ LPNSPLOOKUPSERVICEEND NSPLookupServiceEnd;
273+ LPNSPSETSERVICE NSPSetService;
274+ LPNSPINSTALLSERVICECLASS NSPInstallServiceClass;
275+ LPNSPREMOVESERVICECLASS NSPRemoveServiceClass;
276+ LPNSPGETSERVICECLASSINFO NSPGetServiceClassInfo;
181277 } NSP_ROUTINE, *PNSP_ROUTINE, *LPNSP_ROUTINE;
182278
183-INT WSPAPI NSPStartup(LPGUID,LPNSP_ROUTINE);
184-
185-/* WinSock 2 DLL function prototypes */
186-INT WSPAPI WPUCompleteOverlappedRequest(SOCKET,LPWSAOVERLAPPED,DWORD,DWORD,LPINT);
187-INT WSPAPI WSPStartup(WORD,LPWSPDATA,LPWSAPROTOCOL_INFOW,WSPUPCALLTABLE,LPWSPPROC_TABLE);
188-INT WSPAPI WSCDeinstallProvider(LPGUID,LPINT);
189-INT WSPAPI WSCEnumProtocols(LPINT,LPWSAPROTOCOL_INFOW,LPDWORD,LPINT);
190-INT WSPAPI WSCGetProviderPath(LPGUID,LPWSTR,LPINT,LPINT);
191-INT WSPAPI WSCInstallProvider(CONST LPGUID,CONST LPWSTR,CONST LPWSAPROTOCOL_INFOW,DWORD,LPINT);
192-INT WSPAPI WSCEnableNSProvider(LPGUID,BOOL);
193-INT WSPAPI WSCInstallNameSpace(LPWSTR,LPWSTR,DWORD,DWORD,LPGUID);
194-INT WSPAPI WSCUnInstallNameSpace(LPGUID);
195-INT WSPAPI WSCWriteProviderOrder(LPDWORD,DWORD);
196-
197-#endif /* RC_INVOKED */
198-
199-#ifdef __cplusplus
200-}
201-#endif /* __cplusplus */
202-#endif
279+INT WSPAPI NSPStartup (LPGUID, LPNSP_ROUTINE);
280+
281+/* WinSock v2 DLL function prototypes
282+ */
283+INT WSPAPI WPUCompleteOverlappedRequest
284+ ( SOCKET, LPWSAOVERLAPPED, DWORD, DWORD, LPINT
285+ );
286+INT WSPAPI WSPStartup
287+ ( WORD, LPWSPDATA, LPWSAPROTOCOL_INFOW, WSPUPCALLTABLE, LPWSPPROC_TABLE
288+ );
289+INT WSPAPI WSCDeinstallProvider (LPGUID, LPINT);
290+INT WSPAPI WSCEnumProtocols (LPINT, LPWSAPROTOCOL_INFOW, LPDWORD, LPINT);
291+INT WSPAPI WSCGetProviderPath (LPGUID, LPWSTR, LPINT, LPINT);
292+
293+INT WSPAPI WSCInstallProvider
294+ ( CONST LPGUID, CONST LPWSTR, CONST LPWSAPROTOCOL_INFOW, DWORD, LPINT
295+ );
296+INT WSPAPI WSCEnableNSProvider (LPGUID, BOOL);
297+INT WSPAPI WSCInstallNameSpace (LPWSTR, LPWSTR, DWORD, DWORD, LPGUID);
298+INT WSPAPI WSCUnInstallNameSpace (LPGUID);
299+INT WSPAPI WSCWriteProviderOrder (LPDWORD, DWORD);
300+
301+#endif /* ! RC_INVOKED */
302+
303+_END_C_DECLS
304+
305+#endif /* !_WS2SPI_H: $RCSfile$: end of file */
Show on old repository browser