KERNEL_VERSION_MAJOR: 0 -> 5
[reactos.git] / include / winsock2.h
1 /*
2  * COPYRIGHT:   See COPYING in the top level directory
3  * PROJECT:     ReactOS Winsock 2 DLL
4  * FILE:        include/winsock2.h
5  * PURPOSE:     Header file for the WinSock 2 DLL
6  *              and WinSock 2 applications
7  * DEFINES:     UNICODE    - Use unicode prototypes
8  *              FD_SETSIZE - Maximum size of an FD_SET (default is 64)
9  */
10 #ifndef __WINSOCK2_H
11 #define __WINSOCK2_H
12
13 #ifdef __USE_W32API
14
15 #include_next <winsock2.h>
16
17 #else /* __USE_W32API */
18
19 #include <windows.h>
20 #include <stddef.h>
21
22 #ifdef __cplusplus
23 extern "C"
24 {
25 #endif /* __cplusplus */
26
27 #define WSAAPI  STDCALL
28
29
30 #if 0
31 typedef struct _GUID {
32     ULONG Data1;
33     USHORT Data2;
34     USHORT Data3;
35     UCHAR Data4[8];
36 } GUID, *PGUID, *LPGUID;
37 #endif
38
39 typedef UINT   SOCKET;
40
41 #define INVALID_SOCKET  ((SOCKET)~0)
42 #define SOCKET_ERROR    (-1)
43
44 /* Socket types */
45 #define SOCK_STREAM     1
46 #define SOCK_DGRAM      2
47 #define SOCK_RAW        3
48 #define SOCK_RDM        4
49 #define SOCK_SEQPACKET  5
50
51 /* Per socket flags */
52 #define SO_DEBUG        0x0001
53 #define SO_ACCEPTCONN   0x0002
54 #define SO_REUSEADDR    0x0004
55 #define SO_KEEPALIVE    0x0008
56 #define SO_DONTROUTE    0x0010
57 #define SO_BROADCAST    0x0020
58 #define SO_USELOOPBACK  0x0040
59 #define SO_LINGER       0x0080
60 #define SO_OOBINLINE    0x0100
61
62 #define SO_DONTLINGER   (UINT)(~SO_LINGER)
63
64 #define SO_SNDBUF       0x1001
65 #define SO_RCVBUF       0x1002
66 #define SO_SNDLOWAT     0x1003
67 #define SO_RCVLOWAT     0x1004
68 #define SO_SNDTIMEO     0x1005
69 #define SO_RCVTIMEO     0x1006
70 #define SO_ERROR        0x1007
71 #define SO_TYPE         0x1008
72
73
74 /* Address families */
75 #define AF_UNSPEC       0
76 #define AF_UNIX         1
77 #define AF_INET         2
78 #define AF_IMPLINK      3
79 #define AF_PUP          4
80 #define AF_CHAOS        5
81 #define AF_NS           6
82 #define AF_ISO          7
83 #define AF_OSI          AF_ISO
84 #define AF_ECMA         8
85 #define AF_DATAKIT      9
86 #define AF_CCITT        10
87 #define AF_SNA          11
88 #define AF_DECnet       12
89 #define AF_DLI          13
90 #define AF_LAT          14
91 #define AF_HYLINK       15
92 #define AF_APPLETALK    16
93 #define AF_NETBIOS      17
94
95 #define AF_MAX          18
96
97
98 /* Protocol families, same as address families */
99 #define PF_UNSPEC       AF_UNSPEC
100 #define PF_UNIX         AF_UNIX
101 #define PF_INET         AF_INET
102 #define PF_IMPLINK      AF_IMPLINK
103 #define PF_PUP          AF_PUP
104 #define PF_CHAOS        AF_CHAOS
105 #define PF_NS           AF_NS
106 #define PF_ISO          AF_ISO
107 #define PF_OSI          AF_OSI
108 #define PF_ECMA         AF_ECMA
109 #define PF_DATAKIT      AF_DATAKIT
110 #define PF_CCITT        AF_CCITT
111 #define PF_SNA          AF_SNA
112 #define PF_DECnet       AF_DECnet
113 #define PF_DLI          AF_DLI
114 #define PF_LAT          AF_LAT
115 #define PF_HYLINK       AF_HYLINK
116 #define PF_APPLETALK    AF_APPLETALK
117
118 #define PF_MAX          AF_MAX
119
120
121 #define SOL_SOCKET  0xffff
122
123 #define SOMAXCONN   5
124
125 #define MSG_OOB         0x1
126 #define MSG_PEEK        0x2
127 #define MSG_DONTROUTE   0x4
128
129 #define MSG_MAXIOVLEN   16
130
131
132 #define FD_READ         0x01
133 #define FD_WRITE        0x02
134 #define FD_OOB          0x04
135 #define FD_ACCEPT       0x08
136 #define FD_CONNECT      0x10
137 #define FD_CLOSE        0x20
138
139 #define FD_MAX_EVENTS   6
140 #define FD_ALL_EVENTS   ((1 << FD_MAX_EVENTS) - 1)
141
142
143 /* Error codes */
144
145 #define WSABASEERR              10000
146
147 #define WSAEINTR                (WSABASEERR+4)
148 #define WSAEBADF                (WSABASEERR+9)
149 #define WSAEACCES               (WSABASEERR+13)
150 #define WSAEFAULT               (WSABASEERR+14)
151 #define WSAEINVAL               (WSABASEERR+22)
152 #define WSAEMFILE               (WSABASEERR+24)
153
154 #define WSAEWOULDBLOCK          (WSABASEERR+35)
155 #define WSAEINPROGRESS          (WSABASEERR+36)
156 #define WSAEALREADY             (WSABASEERR+37)
157 #define WSAENOTSOCK             (WSABASEERR+38)
158 #define WSAEDESTADDRREQ         (WSABASEERR+39)
159 #define WSAEMSGSIZE             (WSABASEERR+40)
160 #define WSAEPROTOTYPE           (WSABASEERR+41)
161 #define WSAENOPROTOOPT          (WSABASEERR+42)
162 #define WSAEPROTONOSUPPORT      (WSABASEERR+43)
163 #define WSAESOCKTNOSUPPORT      (WSABASEERR+44)
164 #define WSAEOPNOTSUPP           (WSABASEERR+45)
165 #define WSAEPFNOSUPPORT         (WSABASEERR+46)
166 #define WSAEAFNOSUPPORT         (WSABASEERR+47)
167 #define WSAEADDRINUSE           (WSABASEERR+48)
168 #define WSAEADDRNOTAVAIL        (WSABASEERR+49)
169 #define WSAENETDOWN             (WSABASEERR+50)
170 #define WSAENETUNREACH          (WSABASEERR+51)
171 #define WSAENETRESET            (WSABASEERR+52)
172 #define WSAECONNABORTED         (WSABASEERR+53)
173 #define WSAECONNRESET           (WSABASEERR+54)
174 #define WSAENOBUFS              (WSABASEERR+55)
175 #define WSAEISCONN              (WSABASEERR+56)
176 #define WSAENOTCONN             (WSABASEERR+57)
177 #define WSAESHUTDOWN            (WSABASEERR+58)
178 #define WSAETOOMANYREFS         (WSABASEERR+59)
179 #define WSAETIMEDOUT            (WSABASEERR+60)
180 #define WSAECONNREFUSED         (WSABASEERR+61)
181 #define WSAELOOP                (WSABASEERR+62)
182 #define WSAENAMETOOLONG         (WSABASEERR+63)
183 #define WSAEHOSTDOWN            (WSABASEERR+64)
184 #define WSAEHOSTUNREACH         (WSABASEERR+65)
185 #define WSAENOTEMPTY            (WSABASEERR+66)
186 #define WSAEUSERS               (WSABASEERR+68)
187 #define WSAEDQUOT               (WSABASEERR+69)
188 #define WSAESTALE               (WSABASEERR+70)
189 #define WSAEREMOTE              (WSABASEERR+71)
190
191 /* Extended Windows Sockets error codes */
192 #define WSASYSNOTREADY          (WSABASEERR+91)
193 #define WSAVERNOTSUPPORTED      (WSABASEERR+92)
194 #define WSANOTINITIALISED       (WSABASEERR+93)
195 #define WSAEDISCON              (WSABASEERR+101)
196 #define WSAENOMORE              (WSABASEERR+102)
197 #define WSAECANCELLED           (WSABASEERR+103)
198 #define WSAEINVALIDPROCTABLE    (WSABASEERR+104)
199 #define WSAEINVALIDPROVIDER     (WSABASEERR+105)
200 #define WSAEPROVIDERFAILEDINIT  (WSABASEERR+106)
201 #define WSASYSCALLFAILURE       (WSABASEERR+107)
202 #define WSASERVICE_NOT_FOUND    (WSABASEERR+108)
203 #define WSATYPE_NOT_FOUND       (WSABASEERR+109)
204 #define WSA_E_NO_MORE           (WSABASEERR+110)
205 #define WSA_E_CANCELLED         (WSABASEERR+111)
206 #define WSAEREFUSED             (WSABASEERR+112)
207
208 #define WSAHOST_NOT_FOUND       (WSABASEERR+1001)
209 #define WSATRY_AGAIN            (WSABASEERR+1002)
210 #define WSANO_RECOVERY          (WSABASEERR+1003)
211 #define WSANO_DATA              (WSABASEERR+1004)
212 #define WSANO_ADDRESS           WSANO_DATA
213
214 #define WSAEVENT                HANDLE
215 #define LPWSAEVENT              LPHANDLE
216
217 #define WSA_IO_PENDING          (ERROR_IO_PENDING)
218 #define WSA_IO_INCOMPLETE       (ERROR_IO_INCOMPLETE)
219 #define WSA_INVALID_HANDLE      (ERROR_INVALID_HANDLE)
220 #define WSA_INVALID_PARAMETER   (ERROR_INVALID_PARAMETER)
221 #define WSA_NOT_ENOUGH_MEMORY   (ERROR_NOT_ENOUGH_MEMORY)
222 #define WSA_OPERATION_ABORTED   (ERROR_OPERATION_ABORTED)
223
224 #define WSA_INVALID_EVENT       ((WSAEVENT)NULL)
225 #define WSA_MAXIMUM_WAIT_EVENTS (MAXIMUM_WAIT_OBJECTS)
226 #define WSA_WAIT_FAILED         ((DWORD)-1L)
227 #define WSA_WAIT_EVENT_0        (WAIT_OBJECT_0)
228 #define WSA_WAIT_IO_COMPLETION  (WAIT_IO_COMPLETION)
229 #define WSA_WAIT_TIMEOUT        (WAIT_TIMEOUT)
230 #define WSA_INFINITE            (INFINITE)
231
232 typedef enum _WSACOMPLETIONTYPE {
233     NSP_NOTIFY_IMMEDIATELY = 0,
234     NSP_NOTIFY_HWND,
235     NSP_NOTIFY_EVENT,
236     NSP_NOTIFY_PORT,
237     NSP_NOTIFY_APC,
238 } WSACOMPLETIONTYPE, *PWSACOMPLETIONTYPE, FAR * LPWSACOMPLETIONTYPE;
239
240 #define IOCPARM_MASK    0x7f
241 #define IOC_VOID        0x20000000
242 #define IOC_OUT         0x40000000
243 #define IOC_IN          0x80000000
244 #define IOC_INOUT       (IOC_IN|IOC_OUT)
245
246 #define _IO(x, y)    (IOC_VOID|(x<<8)|y)
247
248 #define _IOR(x, y, t) (IOC_OUT|(((LONG)sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)
249
250 #define _IOW(x, y, t) (IOC_IN|(((LONG)sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)
251
252 #define FIONREAD    _IOR('f', 127, ULONG)
253 #define FIONBIO     _IOW('f', 126, ULONG)
254 #define FIOASYNC    _IOW('f', 125, ULONG)
255
256 /* Socket I/O controls */
257 #define SIOCSHIWAT  _IOW('s',  0, ULONG)
258 #define SIOCGHIWAT  _IOR('s',  1, ULONG)
259 #define SIOCSLOWAT  _IOW('s',  2, ULONG)
260 #define SIOCGLOWAT  _IOR('s',  3, ULONG)
261 #define SIOCATMARK  _IOR('s',  7, ULONG)
262
263
264 typedef unsigned short  u_short;
265 typedef unsigned long   u_long;
266
267 typedef struct in6_addr {
268     union {
269         UCHAR       Byte[16];
270         USHORT      Word[8];
271     } u;
272 } IN6_ADDR;
273 struct sockaddr_in6 {
274     short   sin6_family;
275     u_short sin6_port;
276     u_long  sin6_flowinfo;
277     struct in6_addr sin6_addr;
278     u_long sin6_scope_id;
279 };
280
281 struct in_addr {
282     union {
283         struct { UCHAR s_b1, s_b2,s_b3,s_b4; } S_un_b;
284         struct { USHORT s_w1,s_w2; } S_un_w;
285         ULONG S_addr;
286     } S_un;
287 #define s_addr  S_un.S_addr
288 #define s_host  S_un.S_un_b.s_b2
289 #define s_net   S_un.S_un_b.s_b1
290 #define s_imp   S_un.S_un_w.s_w2
291 #define s_impno S_un.S_un_b.s_b4
292 #define s_lh    S_un.S_un_b.s_b3
293 };
294
295 /*
296    Definitions of bits in internet address integers.
297    NOTE: On subnets the decomposition of addresses to host and 
298    net parts is done according to subnet mask, not the masks here.
299  */
300 #define IN_CLASSA(i)            (((long)(i) & 0x80000000) == 0)
301 #define IN_CLASSA_NET           0xff000000
302 #define IN_CLASSA_NSHIFT        24
303 #define IN_CLASSA_HOST          0x00ffffff
304 #define IN_CLASSA_MAX           128
305
306 #define IN_CLASSB(i)            (((long)(i) & 0xc0000000) == 0x80000000)
307 #define IN_CLASSB_NET           0xffff0000
308 #define IN_CLASSB_NSHIFT        16
309 #define IN_CLASSB_HOST          0x0000ffff
310 #define IN_CLASSB_MAX           65536
311
312 #define IN_CLASSC(i)            (((long)(i) & 0xe0000000) == 0xc0000000)
313 #define IN_CLASSC_NET           0xffffff00
314 #define IN_CLASSC_NSHIFT        8
315 #define IN_CLASSC_HOST          0x000000ff
316
317 #define IN_CLASSD(i)            (((long)(i) & 0xf0000000) == 0xe0000000)
318 #define IN_CLASSD_NET           0xf0000000       /* These ones aren't really */
319 #define IN_CLASSD_NSHIFT        28               /* net and host fields, but */
320 #define IN_CLASSD_HOST          0x0fffffff       /* routing needn't know.    */
321 #define IN_MULTICAST(i)         IN_CLASSD(i)
322
323 #define ADDR_ANY                INADDR_ANY
324
325
326 struct timeval {
327     LONG tv_sec;
328     LONG tv_usec;
329 };
330
331
332 struct sockaddr {
333     USHORT sa_family;
334     CHAR sa_data[14];
335 };
336
337
338 struct linger {
339     USHORT      l_onoff;
340     USHORT      l_linger;
341 };
342
343
344 /* IP specific */
345
346 struct sockaddr_in {
347         SHORT   sin_family;
348         USHORT  sin_port;
349         struct  in_addr sin_addr;
350         CHAR    sin_zero[8];
351 };
352
353 #define INADDR_ANY          ((ULONG)0x00000000)
354 #define INADDR_LOOPBACK     ((ULONG)0x7f000001)
355 #define INADDR_BROADCAST    ((ULONG)0xffffffff)
356 #define INADDR_NONE         ((ULONG)0xffffffff)
357
358 #define IPPROTO_IP      0
359 #define IPPROTO_ICMP    1
360 #define IPPROTO_IGMP    2
361 #define IPPROTO_GGP     3
362 #define IPPROTO_TCP     6
363 #define IPPROTO_PUP     12
364 #define IPPROTO_UDP     17
365 #define IPPROTO_IDP     22
366 #define IPPROTO_ND      77
367 #define IPPROTO_RAW     255
368 #define IPPROTO_MAX     256
369
370
371 #ifndef FD_SETSIZE
372 #define FD_SETSIZE  64
373 #endif /* FD_SETSIZE */
374
375 typedef struct fd_set {
376     UINT fd_count;
377     SOCKET fd_array[FD_SETSIZE];
378 } fd_set;
379
380 extern INT PASCAL FAR __WSAFDIsSet(SOCKET, fd_set FAR*);
381
382 #define FD_CLR(s, set) do { \
383     UINT __i; \
384     for (__i = 0; __i < ((fd_set FAR*)(set))->fd_count; __i++) { \
385         if (((fd_set FAR*)(set))->fd_array[__i] == s) { \
386             while (__i < ((fd_set FAR*)(set))->fd_count - 1) { \
387                 ((fd_set FAR *)(set))->fd_array[__i] = \
388                     ((fd_set FAR*)(set))->fd_array[__i+1]; \
389                 __i++; \
390             } \
391             ((fd_set FAR *)(set))->fd_count--; \
392             break; \
393         } \
394     } \
395 } while(0)
396
397 #define FD_SET(s, set) do { \
398     UINT __i; \
399     for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count; __i++) { \
400         if (((fd_set FAR *)(set))->fd_array[__i] == (s)) { \
401             break; \
402         } \
403     } \
404     if (__i == ((fd_set FAR *)(set))->fd_count) { \
405         if (((fd_set FAR*)(set))->fd_count < FD_SETSIZE) { \
406             ((fd_set FAR*)(set))->fd_array[__i] = (s); \
407             ((fd_set FAR*)(set))->fd_count++; \
408         } \
409     } \
410 } while(0)
411
412 #define FD_ISSET(s, set) __WSAFDIsSet((SOCKET)(s), (fd_set FAR*)(set))
413
414 #define FD_ZERO(set) (((fd_set FAR*)(set))->fd_count = 0)
415
416
417 typedef struct _WSAOVERLAPPED {
418     DWORD Internal;     /* reserved */
419     DWORD InternalHigh; /* reserved */
420     DWORD Offset;       /* reserved */
421     DWORD OffsetHigh;   /* reserved */
422     WSAEVENT hEvent;
423 } WSAOVERLAPPED, FAR* LPWSAOVERLAPPED;
424
425 typedef struct __WSABUF {
426     ULONG len;     /* buffer length */
427     CHAR FAR* buf; /* pointer to buffer */
428 } WSABUF, FAR* LPWSABUF;
429
430
431 typedef ULONG  SERVICETYPE;
432
433 #define SERVICETYPE_NOTRAFFIC               0x00000000
434 #define SERVICETYPE_BESTEFFORT              0x00000001
435 #define SERVICETYPE_CONTROLLEDLOAD          0x00000002
436 #define SERVICETYPE_GUARANTEED              0x00000003
437 #define SERVICETYPE_NETWORK_UNAVAILABLE     0x00000004
438 #define SERVICETYPE_GENERAL_INFORMATION     0x00000005
439 #define SERVICETYPE_NOCHANGE                0x00000006
440 #define SERVICE_IMMEDIATE_TRAFFIC_CONTROL   0x00000007
441
442 typedef struct _flowspec {
443     ULONG TokenRate;           /* In Bytes/sec */
444     ULONG TokenBucketSize;     /* In Bytes */
445     ULONG PeakBandwidth;       /* In Bytes/sec */
446     ULONG Latency;             /* In microseconds */
447     ULONG DelayVariation;      /* In microseconds */
448     SERVICETYPE ServiceType;
449     ULONG MaxSduSize;          /* In Bytes */
450     ULONG MinimumPolicedSize;  /* In Bytes */
451 } FLOWSPEC, *PFLOWSPEC, FAR* LPFLOWSPEC;
452
453
454 typedef struct _QualityOfService {
455     FLOWSPEC SendingFlowspec;   /* The flow spec for data sending */
456     FLOWSPEC ReceivingFlowspec; /* The flow spec for data receiving */
457     WSABUF ProviderSpecific;    /* Additional provider specific stuff */
458 } QOS, FAR* LPQOS;
459
460
461
462 typedef struct _WSANETWORKEVENTS {
463     LONG lNetworkEvents;
464     INT iErrorCode[FD_MAX_EVENTS];
465 } WSANETWORKEVENTS, FAR* LPWSANETWORKEVENTS;
466
467
468 #define MAX_PROTOCOL_CHAIN  7
469
470 #define BASE_PROTOCOL       1
471 #define LAYERED_PROTOCOL    0
472
473 typedef struct _WSAPROTOCOLCHAIN {
474    INT ChainLen;
475    DWORD ChainEntries[MAX_PROTOCOL_CHAIN];
476 } WSAPROTOCOLCHAIN, FAR* LPWSAPROTOCOLCHAIN;
477
478 #define WSAPROTOCOL_LEN 255
479
480 typedef struct _WSAPROTOCOL_INFOA {
481     DWORD dwServiceFlags1;
482     DWORD dwServiceFlags2;
483     DWORD dwServiceFlags3;
484     DWORD dwServiceFlags4;
485     DWORD dwProviderFlags;
486     GUID ProviderId;
487     DWORD dwCatalogEntryId;
488     WSAPROTOCOLCHAIN ProtocolChain;
489     INT iVersion;
490     INT iAddressFamily;
491     INT iMaxSockAddr;
492     INT iMinSockAddr;
493     INT iSocketType;
494     INT iProtocol;
495     INT iProtocolMaxOffset;
496     INT iNetworkByteOrder;
497     INT iSecurityScheme;
498     DWORD dwMessageSize;
499     DWORD dwProviderReserved;
500     CHAR szProtocol[WSAPROTOCOL_LEN + 1];
501 } WSAPROTOCOL_INFOA, FAR* LPWSAPROTOCOL_INFOA;
502
503 typedef struct _WSAPROTOCOL_INFOW {
504     DWORD dwServiceFlags1;
505     DWORD dwServiceFlags2;
506     DWORD dwServiceFlags3;
507     DWORD dwServiceFlags4;
508     DWORD dwProviderFlags;
509     GUID ProviderId;
510     DWORD dwCatalogEntryId;
511     WSAPROTOCOLCHAIN ProtocolChain;
512     INT iVersion;
513     INT iAddressFamily;
514     INT iMaxSockAddr;
515     INT iMinSockAddr;
516     INT iSocketType;
517     INT iProtocol;
518     INT iProtocolMaxOffset;
519     INT iNetworkByteOrder;
520     INT iSecurityScheme;
521     DWORD dwMessageSize;
522     DWORD dwProviderReserved;
523     WCHAR szProtocol[WSAPROTOCOL_LEN + 1];
524 } WSAPROTOCOL_INFOW, FAR * LPWSAPROTOCOL_INFOW;
525
526 #ifndef _DISABLE_TIDENTS
527 #ifdef UNICODE
528 typedef WSAPROTOCOL_INFOW WSAPROTOCOL_INFO;
529 typedef LPWSAPROTOCOL_INFOW LPWSAPROTOCOL_INFO;
530 #else /* UNICODE */
531 typedef WSAPROTOCOL_INFOA WSAPROTOCOL_INFO;
532 typedef LPWSAPROTOCOL_INFOA LPWSAPROTOCOL_INFO;
533 #endif /* UNICODE */
534 #endif /* _DISABLE_TIDENTS */
535
536 typedef
537 VOID
538 CALLBACK (*LPSERVICE_CALLBACK_PROC) (
539     IN LPARAM lParam,
540     IN HANDLE hAsyncTaskHandle
541     );
542
543 typedef struct _SERVICE_ASYNC_INFO {
544     LPSERVICE_CALLBACK_PROC lpServiceCallbackProc;
545     LPARAM lParam;
546     HANDLE hAsyncTaskHandle;
547 } SERVICE_ASYNC_INFO, *PSERVICE_ASYNC_INFO, FAR * LPSERVICE_ASYNC_INFO;
548
549 /* WinSock 2 extended commands for WSAIoctl() */
550
551 #define IOC_UNIX    0x00000000
552 #define IOC_WS2     0x08000000
553 #define IOC_FAMILY  0x10000000
554 #define IOC_VENDOR  0x18000000
555
556 #define _WSAIO  (x,y) (IOC_VOID | (x) | (y))
557 #define _WSAIOR (x,y) (IOC_OUT  | (x) | (y))
558 #define _WSAIOW (x,y) (IOC_IN   | (x) | (y))
559 #define _WSAIORW(x,y) (IOC_INOUT| (x) | (y))
560
561 #define SIO_ASSOCIATE_HANDLE                _WSAIOW (IOC_WS2, 1)
562 #define SIO_ENABLE_CIRCULAR_QUEUEING        _WSAIO  (IOC_WS2, 2)
563 #define SIO_FIND_ROUTE                      _WSAIOR (IOC_WS2, 3)
564 #define SIO_FLUSH                           _WSAIO  (IOC_WS2, 4)
565 #define SIO_GET_BROADCAST_ADDRESS           -WSAIOR (IOC_WS2, 5)
566 #define SIO_GET_EXTENSION_FUNCTION_POINTER  _WSAIORW(IOC_WS2, 6)
567 #define SIO_GET_QOS                         _WSAIORW(IOC_WS2, 7)
568 #define SIO_GET_GROUP_QOS                   _WSAIORW(IOC_WS2, 8)
569 #define SIO_MULTIPOINT_LOOPBACK             _WSAIOW (IOC_WS2, 9)
570 #define SIO_MULTICAST_SCOPE                 _WSAIOW (IOC_WS2, 10)
571 #define SIO_SET_QOS                         _WSAIOW (IOC_WS2, 11)
572 #define SIO_SET_GROUP_QOS                   _WSAIOW (IOC_WS2, 12)
573 #define SIO_TRANSLATE_HANDLE                _WSAIORW(IOC_WS2, 13)
574 #define SIO_ROUTING_INTERFACE_QUERY         _WSAIORW(IOC_WS2, 20)
575 #define SIO_ROUTING_INTERFACE_CHANGE        _WSAIOW (IOC_WS2, 21)
576 #define SIO_ADDRESS_LIST_QUERY              _WSAIOR (IOC_WS2, 22)
577 #define SIO_ADDRESS_LIST_CHANGE             _WSAIO  (IOC_WS2, 23)
578 #define SIO_QUERY_TARGET_PNP_HANDLE         _WSAIOR (IOC_W32, 24)
579
580
581 /* Structures for WinSock 1.1 compatible namespace resolution */
582
583 struct hostent {
584     CHAR FAR* h_name;
585     CHAR FAR* FAR* h_aliases;
586     SHORT h_addrtype;
587     SHORT h_length;
588     CHAR FAR* FAR* h_addr_list;
589 #define h_addr h_addr_list[0]   /* Backward compatible field name */
590 };
591
592 struct protoent {
593     CHAR FAR* p_name;
594     CHAR FAR* FAR* p_aliases;
595     SHORT p_proto;
596 };
597
598 struct servent {
599     CHAR FAR* s_name;
600     CHAR FAR* FAR*      s_aliases;
601     SHORT s_port;
602     CHAR FAR* s_proto;
603 };
604
605 /* It is assumed here that a network number fits in 32 bits. */
606 struct netent {
607     CHAR FAR* n_name;               /* official net name */
608     CHAR FAR* FAR* n_aliases;       /* list of alias's */
609     SHORT n_addrtype;               /* network address type id */
610     ULONG n_net;                    /* network number */
611 };
612
613
614 typedef UINT GROUP;
615
616 typedef
617 INT
618 (CALLBACK * LPCONDITIONPROC)(
619     LPWSABUF lpCallerId,
620     LPWSABUF lpCallerData,
621     LPQOS lpSQOS,
622     LPQOS lpGQOS,
623     LPWSABUF lpCalleeId,
624     LPWSABUF lpCalleeData,
625     GROUP FAR* g,
626     DWORD dwCallbackData);
627
628 typedef
629 VOID
630 (CALLBACK* LPWSAOVERLAPPED_COMPLETION_ROUTINE)(
631     DWORD dwError,
632     DWORD cbTransferred,
633     LPWSAOVERLAPPED lpOverlapped,
634     DWORD dwFlags);
635
636 typedef struct _WSACOMPLETION {
637     WSACOMPLETIONTYPE Type;
638     union {
639         struct {
640             HWND hWnd;
641             UINT uMsg;
642             WPARAM context;
643         } WindowMessage;
644         struct {
645             LPWSAOVERLAPPED lpOverlapped;
646         } Event;
647         struct {
648             LPWSAOVERLAPPED lpOverlapped;
649             LPWSAOVERLAPPED_COMPLETION_ROUTINE lpfnCompletionProc;
650         } Apc;
651         struct {
652             LPWSAOVERLAPPED lpOverlapped;
653             HANDLE hPort;
654             ULONG_PTR Key;
655         } Port;
656     } Parameters;
657 } WSACOMPLETION, *PWSACOMPLETION, FAR *LPWSACOMPLETION;
658
659 /* Microsoft Windows extended data types */
660
661 typedef struct sockaddr SOCKADDR;
662 typedef struct sockaddr *PSOCKADDR;
663 typedef struct sockaddr FAR *LPSOCKADDR;
664
665 typedef struct sockaddr_in SOCKADDR_IN;
666 typedef struct sockaddr_in *PSOCKADDR_IN;
667 typedef struct sockaddr_in FAR *LPSOCKADDR_IN;
668
669 typedef struct linger LINGER;
670 typedef struct linger *PLINGER;
671 typedef struct linger FAR *LPLINGER;
672
673 typedef struct in_addr IN_ADDR;
674 typedef struct in_addr *PIN_ADDR;
675 typedef struct in_addr FAR *LPIN_ADDR;
676
677 typedef struct fd_set FD_SET;
678 typedef struct fd_set *PFD_SET;
679 typedef struct fd_set FAR *LPFD_SET;
680
681 typedef struct hostent HOSTENT;
682 typedef struct hostent *PHOSTENT;
683 typedef struct hostent FAR *LPHOSTENT;
684
685 typedef struct servent SERVENT;
686 typedef struct servent *PSERVENT;
687 typedef struct servent FAR *LPSERVENT;
688
689 typedef struct protoent PROTOENT;
690 typedef struct protoent *PPROTOENT;
691 typedef struct protoent FAR *LPPROTOENT;
692
693 typedef struct timeval TIMEVAL;
694 typedef struct timeval *PTIMEVAL;
695 typedef struct timeval FAR *LPTIMEVAL;
696
697 #define WSAMAKEASYNCREPLY(buflen,error)     MAKELONG(buflen,error)
698 #define WSAMAKESELECTREPLY(event,error)     MAKELONG(event,error)
699 #define WSAGETASYNCBUFLEN(lParam)           LOWORD(lParam)
700 #define WSAGETASYNCERROR(lParam)            HIWORD(lParam)
701 #define WSAGETSELECTEVENT(lParam)           LOWORD(lParam)
702 #define WSAGETSELECTERROR(lParam)           HIWORD(lParam)
703
704
705 #define WSADESCRIPTION_LEN  256
706 #define WSASYS_STATUS_LEN   128
707
708 typedef struct WSAData {
709     WORD wVersion;
710     WORD wHighVersion;
711     CHAR szDescription[WSADESCRIPTION_LEN + 1];
712     CHAR szSystemStatus[WSASYS_STATUS_LEN + 1];
713     USHORT iMaxSockets;
714     USHORT iMaxUdpDg; 
715     CHAR FAR* lpVendorInfo;
716 } WSADATA, FAR* LPWSADATA;
717
718 #ifndef __BLOB_T_DEFINED
719 #define __BLOB_T_DEFINED
720 typedef struct _BLOB {
721     ULONG cbSize;
722     BYTE *pBlobData;
723 } BLOB, *LPBLOB;
724 #else
725 typedef BLOB *LPBLOB;
726 #endif
727
728 typedef struct _SOCKET_ADDRESS {
729     LPSOCKADDR lpSockaddr;
730     INT iSockaddrLength;
731 } SOCKET_ADDRESS, *PSOCKET_ADDRESS, FAR* LPSOCKET_ADDRESS;
732
733 typedef struct _SOCKET_ADDRESS_LIST {
734     INT iAddressCount;
735     SOCKET_ADDRESS Address[1];
736 } SOCKET_ADDRESS_LIST, FAR* LPSOCKET_ADDRESS_LIST;
737
738 typedef struct _CSADDR_INFO {
739     SOCKET_ADDRESS LocalAddr;
740     SOCKET_ADDRESS RemoteAddr;
741     INT iSocketType;
742     INT iProtocol;
743 } CSADDR_INFO, *PCSADDR_INFO, FAR* LPCSADDR_INFO;
744
745
746 /* Structures for namespace resolution */
747
748 typedef struct _WSANAMESPACE_INFOA {
749     GUID NSProviderId;
750     DWORD dwNameSpace;
751     BOOL fActive;
752     DWORD dwVersion;
753     LPSTR lpszIdentifier;
754 } WSANAMESPACE_INFOA, *PWSANAMESPACE_INFOA, *LPWSANAMESPACE_INFOA;
755
756 typedef struct _WSANAMESPACE_INFOW {
757     GUID NSProviderId;
758     DWORD dwNameSpace;
759     BOOL fActive;
760     DWORD dwVersion;
761     LPWSTR lpszIdentifier;
762 } WSANAMESPACE_INFOW, *PWSANAMESPACE_INFOW, *LPWSANAMESPACE_INFOW;
763
764 #ifndef _DISABLE_TIDENTS
765 #ifdef UNICODE
766 typedef WSANAMESPACE_INFOW WSANAMESPACE_INFO;
767 typedef PWSANAMESPACE_INFOW PWSANAMESPACE_INFO;
768 typedef LPWSANAMESPACE_INFOW LPWSANAMESPACE_INFO;
769 #else /* UNICODE */
770 typedef WSANAMESPACE_INFOA WSANAMESPACE_INFO;
771 typedef PWSANAMESPACE_INFOA PWSANAMESPACE_INFO;
772 typedef LPWSANAMESPACE_INFOA LPWSANAMESPACE_INFO;
773 #endif /* UNICODE */
774 #endif /* _DISABLE_TIDENTS */
775
776 typedef struct _TRANSMIT_FILE_BUFFERS {
777     LPVOID Head;
778     DWORD HeadLength;
779     LPVOID Tail;
780     DWORD TailLength;
781 } TRANSMIT_FILE_BUFFERS, *PTRANSMIT_FILE_BUFFERS, FAR *LPTRANSMIT_FILE_BUFFERS;
782
783 typedef struct addrinfo
784 {
785     int                 ai_flags;
786     int                 ai_family;
787     int                 ai_socktype;
788     int                 ai_protocol;
789     size_t              ai_addrlen;
790     char *              ai_canonname;
791     struct sockaddr *   ai_addr;
792     struct addrinfo *   ai_next;
793 }
794 ADDRINFO, *LPADDRINFO;
795
796 typedef enum _WSAEcomparator
797 {
798     COMP_EQUAL = 0,
799     COMP_NOTLESS
800 } WSAECOMPARATOR, *PWSAECOMPARATOR, *LPWSAECOMPARATOR;
801
802 typedef struct _WSAVersion
803 {
804     DWORD dwVersion;
805     WSAECOMPARATOR ecHow;
806 }WSAVERSION, *PWSAVERSION, *LPWSAVERSION;
807
808
809 typedef struct _AFPROTOCOLS {
810     INT iAddressFamily;
811     INT iProtocol;
812 } AFPROTOCOLS, *PAFPROTOCOLS, *LPAFPROTOCOLS;
813
814
815 typedef struct _WSAQuerySetA {
816     DWORD dwSize;
817     LPSTR lpszServiceInstanceName;
818     LPGUID lpServiceClassId;
819     LPWSAVERSION lpVersion;
820     LPSTR lpszComment;
821     DWORD dwNameSpace;
822     LPGUID lpNSProviderId;
823     LPSTR lpszContext;
824     DWORD dwNumberOfProtocols;
825     LPAFPROTOCOLS lpafpProtocols;
826     LPSTR lpszQueryString;
827     DWORD dwNumberOfCsAddrs;
828     LPCSADDR_INFO lpcsaBuffer;
829     DWORD dwOutputFlags;
830     LPBLOB lpBlob;
831 } WSAQUERYSETA, *PWSAQUERYSETA, *LPWSAQUERYSETA;
832
833 typedef struct _WSAQuerySetW {
834     DWORD dwSize;
835     LPWSTR lpszServiceInstanceName;
836     LPGUID lpServiceClassId;
837     LPWSAVERSION lpVersion;
838     LPWSTR lpszComment;
839     DWORD dwNameSpace;
840     LPGUID lpNSProviderId;
841     LPWSTR lpszContext;
842     DWORD dwNumberOfProtocols;
843     LPAFPROTOCOLS lpafpProtocols;
844     LPWSTR lpszQueryString;
845     DWORD dwNumberOfCsAddrs;
846     LPCSADDR_INFO lpcsaBuffer;
847     DWORD dwOutputFlags;
848     LPBLOB lpBlob;
849 } WSAQUERYSETW, *PWSAQUERYSETW, *LPWSAQUERYSETW;
850
851 #ifndef _DISABLE_TIDENTS
852 #ifdef UNICODE
853 typedef WSAQUERYSETW WSAQUERYSET;
854 typedef PWSAQUERYSETW PWSAQUERYSET;
855 typedef LPWSAQUERYSETW LPWSAQUERYSET;
856 #else /* UNICODE */
857 typedef WSAQUERYSETA WSAQUERYSET;
858 typedef PWSAQUERYSETA PWSAQUERYSET;
859 typedef LPWSAQUERYSETA LPWSAQUERYSET;
860 #endif /* UNICODE */
861 #endif /* _DISABLE_TIDENTS */
862
863
864 typedef enum _WSAESETSERVICEOP {
865     RNRSERVICE_REGISTER = 0,
866     RNRSERVICE_DEREGISTER,
867     RNRSERVICE_DELETE
868 } WSAESETSERVICEOP, *PWSAESETSERVICEOP, *LPWSAESETSERVICEOP;
869
870
871 typedef struct _WSANSClassInfoA {
872     LPSTR lpszName;
873     DWORD dwNameSpace;
874     DWORD dwValueType;
875     DWORD dwValueSize;
876     LPVOID lpValue;
877 } WSANSCLASSINFOA, *PWSANSCLASSINFOA, *LPWSANSCLASSINFOA;
878
879 typedef struct _WSANSClassInfoW {
880     LPWSTR lpszName;
881     DWORD dwNameSpace;
882     DWORD dwValueType;
883     DWORD dwValueSize;
884     LPVOID lpValue;
885 } WSANSCLASSINFOW, *PWSANSCLASSINFOW, *LPWSANSCLASSINFOW;
886
887 #ifndef _DISABLE_TIDENTS
888 #ifdef UNICODE
889 typedef WSANSCLASSINFOW WSANSCLASSINFO;
890 typedef PWSANSCLASSINFOW PWSANSCLASSINFO;
891 typedef LPWSANSCLASSINFOW LPWSANSCLASSINFO;
892 #else /* UNICODE */
893 typedef WSANSCLASSINFOA WSANSCLASSINFO;
894 typedef PWSANSCLASSINFOA PWSANSCLASSINFO;
895 typedef LPWSANSCLASSINFOA LPWSANSCLASSINFO;
896 #endif /* UNICODE */
897 #endif /* _DISABLE_TIDENTS */
898
899 typedef struct _WSAServiceClassInfoA {
900     LPGUID lpServiceClassId;
901     LPSTR lpszServiceClassName;
902     DWORD dwCount;
903     LPWSANSCLASSINFOA lpClassInfos;
904 } WSASERVICECLASSINFOA, *PWSASERVICECLASSINFOA, *LPWSASERVICECLASSINFOA;
905
906 typedef struct _WSAServiceClassInfoW {
907     LPGUID lpServiceClassId;
908     LPWSTR lpszServiceClassName;
909     DWORD dwCount;
910     LPWSANSCLASSINFOW lpClassInfos;
911 } WSASERVICECLASSINFOW, *PWSASERVICECLASSINFOW, *LPWSASERVICECLASSINFOW;
912
913 #ifndef _DISABLE_TIDENTS
914 #ifdef UNICODE
915 typedef WSASERVICECLASSINFOW WSASERVICECLASSINFO;
916 typedef PWSASERVICECLASSINFOW PWSASERVICECLASSINFO;
917 typedef LPWSASERVICECLASSINFOW LPWSASERVICECLASSINFO;
918 #else /* UNICODE */
919 typedef WSASERVICECLASSINFOA WSASERVICECLASSINFO;
920 typedef PWSASERVICECLASSINFOA PWSASERVICECLASSINFO;
921 typedef LPWSASERVICECLASSINFOA LPWSASERVICECLASSINFO;
922 #endif /* UNICODE */
923 #endif /* _DISABLE_TIDENTS */
924
925
926 /* WinSock 2 DLL prototypes */
927
928 SOCKET
929 WSAAPI
930 accept(
931     IN  SOCKET s,
932     OUT LPSOCKADDR addr,
933     OUT INT FAR* addrlen);
934
935 INT
936 WSAAPI
937 bind(
938     IN  SOCKET s,
939     IN  CONST LPSOCKADDR name,
940     IN  INT namelen);
941
942 INT
943 WSAAPI
944 closesocket(
945     IN  SOCKET s);
946
947 INT
948 WSAAPI
949 connect(
950     IN  SOCKET s,
951     IN  CONST LPSOCKADDR name,
952     IN  INT namelen);
953
954 INT
955 WSAAPI
956 getpeername(
957     IN      SOCKET s,
958     OUT     LPSOCKADDR name,
959     IN OUT  INT FAR* namelen);
960
961 INT
962 WSAAPI
963 getsockname(
964     IN      SOCKET s,
965     OUT     LPSOCKADDR name,
966     IN OUT  INT FAR* namelen);
967
968 INT
969 WSAAPI
970 getsockopt(
971     IN      SOCKET s,
972     IN      INT level,
973     IN      INT optname,
974     OUT     CHAR FAR* optval,
975     IN OUT  INT FAR* optlen);
976
977 ULONG
978 WSAAPI
979 htonl(
980     IN  ULONG hostlong);
981
982 USHORT
983 WSAAPI
984 htons(
985     IN  USHORT hostshort);
986
987 INT
988 WSAAPI
989 ioctlsocket(
990     IN      SOCKET s,
991     IN      LONG cmd,
992     IN OUT  ULONG FAR* argp);
993
994 INT
995 WSAAPI
996 listen(
997     IN  SOCKET s,
998     IN  INT backlog);
999
1000 ULONG
1001 WSAAPI
1002 ntohl(
1003     IN  ULONG netlong);
1004
1005 USHORT
1006 WSAAPI
1007 ntohs(
1008     IN  USHORT netshort);
1009
1010 INT
1011 WSAAPI
1012 recv(
1013     IN  SOCKET s,
1014     OUT CHAR FAR* buf,
1015     IN  INT len,
1016     IN  INT flags);
1017
1018 INT
1019 WSAAPI
1020 recvfrom(
1021     IN      SOCKET s,
1022     OUT     CHAR FAR* buf,
1023     IN      INT len,
1024     IN      INT flags,
1025     OUT     LPSOCKADDR from,
1026     IN OUT  INT FAR* fromlen);
1027
1028 INT
1029 WSAAPI
1030 select(
1031     IN      INT nfds, 
1032     IN OUT  LPFD_SET readfds, 
1033     IN OUT  LPFD_SET writefds, 
1034     IN OUT  LPFD_SET exceptfds, 
1035     IN      CONST LPTIMEVAL timeout);
1036
1037 INT
1038 WSAAPI
1039 send( 
1040     IN  SOCKET s, 
1041     IN  CONST CHAR FAR* buf, 
1042     IN  INT len, 
1043     IN  INT flags);
1044
1045 INT
1046 WSAAPI
1047 sendto(
1048     IN  SOCKET s,
1049     IN  CONST CHAR FAR* buf,
1050     IN  INT len,
1051     IN  INT flags,
1052     IN  CONST LPSOCKADDR to, 
1053     IN  INT tolen);
1054
1055 INT
1056 WSAAPI
1057 setsockopt(
1058     IN  SOCKET s,
1059     IN  INT level,
1060     IN  INT optname,
1061     IN  CONST CHAR FAR* optval,
1062     IN  INT optlen);
1063
1064 INT
1065 WSAAPI
1066 shutdown(
1067     IN  SOCKET s,
1068     IN  INT how);
1069
1070 SOCKET
1071 WSAAPI
1072 socket(
1073     IN  INT af,
1074     IN  INT type,
1075     IN  INT protocol);
1076
1077 SOCKET
1078 WSAAPI
1079 WSAAccept(
1080     IN      SOCKET s,
1081     OUT     LPSOCKADDR addr,
1082     IN OUT  LPINT addrlen,
1083     IN      LPCONDITIONPROC lpfnCondition,
1084     IN      DWORD dwCallbackData);
1085
1086 INT
1087 WSAAPI
1088 WSAAsyncSelect(
1089     IN  SOCKET s,
1090     IN  HWND hWnd,
1091     IN  UINT wMsg,
1092     IN  LONG lEvent);
1093
1094 INT
1095 WSAAPI
1096 WSACancelBlockingCall(VOID);
1097
1098 INT
1099 WSAAPI
1100 WSACleanup(VOID);
1101
1102 BOOL
1103 WSAAPI
1104 WSACloseEvent(
1105     IN  WSAEVENT hEvent);
1106
1107 INT
1108 WSAAPI
1109 WSAConnect(
1110     IN  SOCKET s,
1111     IN  CONST LPSOCKADDR name,
1112     IN  INT namelen,
1113     IN  LPWSABUF lpCallerData,
1114     OUT LPWSABUF lpCalleeData,
1115     IN  LPQOS lpSQOS,
1116     IN  LPQOS lpGQOS);
1117
1118 WSAEVENT
1119 WSAAPI
1120 WSACreateEvent(VOID);
1121
1122 INT
1123 WSAAPI
1124 WSADuplicateSocketA(
1125     IN  SOCKET s,
1126     IN  DWORD dwProcessId,
1127     OUT LPWSAPROTOCOL_INFOA lpProtocolInfo);
1128
1129 INT
1130 WSAAPI
1131 WSADuplicateSocketW(
1132     IN  SOCKET s,
1133     IN  DWORD dwProcessId,
1134     OUT LPWSAPROTOCOL_INFOW lpProtocolInfo);
1135
1136 #ifndef _DISABLE_TIDENTS
1137 #ifdef UNICODE
1138 #define WSADuplicateSocket WSADuplicateSocketA
1139 #else /* UNICODE */
1140 #define WSADuplicateSocket WSADuplicateSocketW
1141 #endif /* UNICODE */
1142 #endif /* _DISABLE_TIDENTS */
1143
1144 INT
1145 WSAAPI
1146 WSAEnumNetworkEvents(
1147     IN  SOCKET s,
1148     IN  WSAEVENT hEventObject,
1149     OUT LPWSANETWORKEVENTS lpNetworkEvents);
1150
1151 INT
1152 WSAAPI
1153 WSAEnumProtocolsA(
1154     IN      LPINT lpiProtocols,
1155     OUT     LPWSAPROTOCOL_INFOA lpProtocolBuffer,
1156     IN OUT  LPDWORD lpdwBufferLength);
1157
1158 INT
1159 WSAAPI
1160 WSAEnumProtocolsW(
1161     IN      LPINT lpiProtocols,
1162     OUT     LPWSAPROTOCOL_INFOW lpProtocolBuffer,
1163     IN OUT  LPDWORD lpdwBufferLength);
1164
1165 #ifndef _DISABLE_TIDENTS
1166 #ifdef UNICODE
1167 #define WSAEnumProtocols WSAEnumProtocolsA
1168 #else /* UNICODE */
1169 #define WSAEnumProtocols WSAEnumProtocolsW
1170 #endif /* UNICODE */
1171 #endif /* _DISABLE_TIDENTS */
1172
1173 INT
1174 WSAAPI
1175 WSAEventSelect(
1176     IN  SOCKET s,
1177     IN  WSAEVENT hEventObject,
1178     IN  LONG lNetworkEvents);
1179
1180 INT
1181 WSAAPI
1182 WSAGetLastError(VOID);
1183
1184 BOOL
1185 WSAAPI
1186 WSAGetOverlappedResult(
1187     IN  SOCKET s,
1188     IN  LPWSAOVERLAPPED lpOverlapped,
1189     OUT LPDWORD lpcbTransfer,
1190     IN  BOOL fWait,
1191     OUT LPDWORD lpdwFlags);
1192
1193 BOOL
1194 WSAAPI
1195 WSAGetQOSByName(
1196     IN      SOCKET s, 
1197     IN OUT  LPWSABUF lpQOSName, 
1198     OUT     LPQOS lpQOS);
1199
1200 INT
1201 WSAAPI
1202 WSAHtonl(
1203     IN  SOCKET s,
1204     IN  ULONG hostlong,
1205     OUT ULONG FAR* lpnetlong);
1206
1207 INT
1208 WSAAPI
1209 WSAHtons(
1210     IN  SOCKET s,
1211     IN  USHORT hostshort,
1212     OUT USHORT FAR* lpnetshort);
1213
1214 INT
1215 WSAAPI
1216 WSAIoctl(
1217     IN  SOCKET s,
1218     IN  DWORD dwIoControlCode,
1219     IN  LPVOID lpvInBuffer,
1220     IN  DWORD cbInBuffer,
1221     OUT LPVOID lpvOutBuffer,
1222     IN  DWORD cbOutBuffer,
1223     OUT LPDWORD lpcbBytesReturned,
1224     IN  LPWSAOVERLAPPED lpOverlapped,
1225     IN  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
1226
1227 BOOL
1228 WSAAPI
1229 WSAIsBlocking(VOID);
1230
1231 SOCKET
1232 WSAAPI
1233 WSAJoinLeaf(
1234     IN  SOCKET s,
1235     IN  CONST LPSOCKADDR name,
1236     IN  INT namelen,
1237     IN  LPWSABUF lpCallerData,
1238     OUT LPWSABUF lpCalleeData,
1239     IN  LPQOS lpSQOS,
1240     IN  LPQOS lpGQOS,
1241     IN  DWORD dwFlags);
1242
1243 INT
1244 WSAAPI
1245 WSANtohl(
1246     IN  SOCKET s,
1247     IN  ULONG netlong,
1248     OUT ULONG FAR* lphostlong);
1249
1250 INT
1251 WSAAPI
1252 WSANtohs(
1253     IN  SOCKET s,
1254     IN  USHORT netshort,
1255     OUT USHORT FAR* lphostshort);
1256
1257 INT
1258 WSAAPI
1259 WSARecv(
1260     IN      SOCKET s,
1261     IN OUT  LPWSABUF lpBuffers,
1262     IN      DWORD dwBufferCount,
1263     OUT     LPDWORD lpNumberOfBytesRecvd,
1264     IN OUT  LPDWORD lpFlags,
1265     IN      LPWSAOVERLAPPED lpOverlapped,
1266     IN      LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
1267
1268 INT
1269 WSAAPI
1270 WSARecvDisconnect(
1271     IN  SOCKET s,
1272     OUT LPWSABUF lpInboundDisconnectData);
1273
1274 INT
1275 WSAAPI
1276 WSARecvFrom(
1277     IN      SOCKET s,
1278     IN OUT  LPWSABUF lpBuffers,
1279     IN      DWORD  dwBufferCount,
1280     OUT     LPDWORD  lpNumberOfBytesRecvd,
1281     IN OUT  LPDWORD lpFlags,
1282     OUT     LPSOCKADDR lpFrom,
1283     IN OUT  LPINT lpFromlen,
1284     IN      LPWSAOVERLAPPED lpOverlapped,
1285     IN      LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
1286
1287 BOOL
1288 WSAAPI
1289 WSAResetEvent(
1290     IN  WSAEVENT hEvent);
1291
1292 INT
1293 WSAAPI
1294 WSASend(
1295     IN  SOCKET s,
1296     IN  LPWSABUF lpBuffers,
1297     IN  DWORD dwBufferCount,
1298     OUT LPDWORD lpNumberOfBytesSent,
1299     IN  DWORD dwFlags,
1300     IN  LPWSAOVERLAPPED lpOverlapped,
1301     IN  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
1302
1303 INT
1304 WSAAPI
1305 WSASendDisconnect(
1306     IN  SOCKET s,
1307     IN  LPWSABUF lpOutboundDisconnectData);
1308
1309 INT
1310 WSAAPI
1311 WSASendTo(
1312     IN  SOCKET s,
1313     IN  LPWSABUF lpBuffers,
1314     IN  DWORD dwBufferCount,
1315     OUT LPDWORD lpNumberOfBytesSent,
1316     IN  DWORD dwFlags,
1317     IN  CONST LPSOCKADDR lpTo,
1318     IN  INT iToLen,
1319     IN  LPWSAOVERLAPPED lpOverlapped,
1320     IN  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
1321
1322 FARPROC
1323 WSAAPI
1324 WSASetBlockingHook(
1325     IN  FARPROC lpBlockFunc);
1326
1327 BOOL
1328 WSAAPI
1329 WSASetEvent(
1330     IN  WSAEVENT hEvent);
1331
1332 VOID
1333 WSAAPI
1334 WSASetLastError(
1335     IN  INT iError);
1336
1337 SOCKET
1338 WSAAPI
1339 WSASocketA(
1340     IN  INT af,
1341     IN  INT type,
1342     IN  INT protocol,
1343     IN  LPWSAPROTOCOL_INFOA lpProtocolInfo,
1344     IN  GROUP g,
1345     IN  DWORD dwFlags);
1346
1347 SOCKET
1348 WSAAPI
1349 WSASocketW(
1350     IN  INT af,
1351     IN  INT type,
1352     IN  INT protocol,
1353     IN  LPWSAPROTOCOL_INFOW lpProtocolInfo,
1354     IN  GROUP g,
1355     IN  DWORD dwFlags);
1356
1357 #ifndef _DISABLE_TIDENTS
1358 #ifdef UNICODE
1359 #define WSASocket WSASocketW
1360 #else /* UNICODE */
1361 #define WSASocket WSASocketA
1362 #endif /* UNICODE */
1363 #endif /* _DISABLE_TIDENTS */
1364
1365 INT
1366 WSAAPI
1367 WSAStartup(
1368     IN  WORD wVersionRequested,
1369     OUT LPWSADATA lpWSAData);
1370
1371 INT
1372 WSAAPI
1373 WSAUnhookBlockingHook(VOID);
1374
1375 DWORD
1376 WSAAPI
1377 WSAWaitForMultipleEvents(
1378     IN  DWORD cEvents,
1379     IN  CONST WSAEVENT FAR* lphEvents,
1380     IN  BOOL fWaitAll,
1381     IN  DWORD dwTimeout,
1382     IN  BOOL fAlertable);
1383
1384 INT
1385 WSAAPI
1386 WSAProviderConfigChange(
1387     IN OUT  LPHANDLE lpNotificationHandle,
1388     IN      LPWSAOVERLAPPED lpOverlapped,
1389     IN      LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
1390
1391 /* Name resolution APIs */
1392
1393 INT
1394 WSAAPI
1395 WSAAddressToStringA(
1396     IN      LPSOCKADDR lpsaAddress,
1397     IN      DWORD dwAddressLength,
1398     IN      LPWSAPROTOCOL_INFOA lpProtocolInfo,
1399     OUT     LPSTR lpszAddressString,
1400     IN OUT  LPDWORD lpdwAddressStringLength);
1401
1402 INT
1403 WSAAPI
1404 WSAAddressToStringW(
1405     IN      LPSOCKADDR lpsaAddress,
1406     IN      DWORD dwAddressLength,
1407     IN      LPWSAPROTOCOL_INFOW lpProtocolInfo,
1408     OUT     LPWSTR lpszAddressString,
1409     IN OUT  LPDWORD lpdwAddressStringLength);
1410
1411 #ifndef _DISABLE_TIDENTS
1412 #ifdef UNICODE
1413 #define WSAAddressToString WSAAddressToStringW
1414 #else /* UNICODE */
1415 #define WSAAddressToString WSAAddressToStringA
1416 #endif /* UNICODE */
1417 #endif /* _DISABLE_TIDENTS */
1418
1419 INT
1420 WSAAPI
1421 WSAEnumNameSpaceProvidersA(
1422     IN OUT  LPDWORD lpdwBufferLength,
1423     OUT     LPWSANAMESPACE_INFOA lpnspBuffer);
1424
1425 INT
1426 WSAAPI
1427 WSAEnumNameSpaceProvidersW(
1428     IN OUT  LPDWORD lpdwBufferLength,
1429     OUT     LPWSANAMESPACE_INFOW lpnspBuffer);
1430
1431 #ifndef _DISABLE_TIDENTS
1432 #ifdef UNICODE
1433 #define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersW
1434 #else /* UNICODE */
1435 #define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersA
1436 #endif /* UNICODE */
1437 #endif /* _DISABLE_TIDENTS */
1438
1439 typedef int socklen_t;
1440
1441 INT
1442 WSAAPI
1443 WSAGetServiceClassInfoA(
1444     IN      LPGUID lpProviderId,
1445     IN      LPGUID lpServiceClassId,
1446     IN OUT  LPDWORD lpdwBufferLength,
1447     OUT     LPWSASERVICECLASSINFOA lpServiceClassInfo);
1448
1449 INT
1450 WSAAPI
1451 WSAGetServiceClassInfoW(
1452     IN      LPGUID lpProviderId,
1453     IN      LPGUID lpServiceClassId,
1454     IN OUT  LPDWORD lpdwBufferLength,
1455     OUT     LPWSASERVICECLASSINFOW lpServiceClassInfo);
1456
1457 #ifndef _DISABLE_TIDENTS
1458 #ifdef UNICODE
1459 #define WSAGetServiceClassInfo WSAGetServiceClassInfoW
1460 #else /* UNICODE */
1461 #define WSAGetServiceClassInfo WSAGetServiceClassInfoA
1462 #endif /* UNICODE */
1463 #endif /* _DISABLE_TIDENTS */
1464
1465 INT
1466 WSAAPI
1467 WSAGetServiceClassNameByClassIdA(
1468     IN      LPGUID  lpServiceClassId,
1469     OUT     LPSTR   lpszServiceClassName,
1470     IN OUT  LPDWORD lpdwBufferLength);
1471
1472 INT
1473 WSAAPI
1474 WSAGetServiceClassNameByClassIdW(
1475     IN      LPGUID  lpServiceClassId,
1476     OUT     LPWSTR  lpszServiceClassName,
1477     IN OUT  LPDWORD lpdwBufferLength);
1478
1479 #ifndef _DISABLE_TIDENTS
1480 #ifdef UNICODE
1481 #define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdW
1482 #else /* UNICODE */
1483 #define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdA
1484 #endif /* UNICODE */
1485 #endif /* _DISABLE_TIDENTS */
1486
1487 INT
1488 WSAAPI
1489 WSAInstallServiceClassA(
1490     IN  LPWSASERVICECLASSINFOA lpServiceClassInfo);
1491
1492 INT
1493 WSAAPI
1494 WSAInstallServiceClassW(
1495     IN  LPWSASERVICECLASSINFOW lpServiceClassInfo);
1496
1497 #ifndef _DISABLE_TIDENTS
1498 #ifdef UNICODE
1499 #define WSAInstallServiceClass WSAInstallServiceClassW
1500 #else /* UNICODE */
1501 #define WSAInstallServiceClass WSAInstallServiceClassA
1502 #endif /* UNICODE */
1503 #endif /* _DISABLE_TIDENTS */
1504
1505 INT
1506 WSAAPI
1507 WSALookupServiceBeginA(
1508     IN  LPWSAQUERYSETA lpqsRestrictions,
1509     IN  DWORD dwControlFlags,
1510     OUT LPHANDLE lphLookup);
1511
1512 INT
1513 WSAAPI
1514 WSALookupServiceBeginW(
1515     IN  LPWSAQUERYSETW lpqsRestrictions,
1516     IN  DWORD dwControlFlags,
1517     OUT LPHANDLE lphLookup);
1518
1519 #ifndef _DISABLE_TIDENTS
1520 #ifdef UNICODE
1521 #define WSALookupServiceBegin WSALookupServiceBeginW
1522 #else /* UNICODE */
1523 #define WSALookupServiceBegin WSALookupServiceBeginA
1524 #endif /* UNICODE */
1525 #endif /* _DISABLE_TIDENTS */
1526
1527 INT
1528 WSAAPI
1529 WSALookupServiceEnd(
1530     IN  HANDLE hLookup);
1531
1532 INT
1533 WSAAPI
1534 WSALookupServiceNextA(
1535     IN      HANDLE         hLookup,
1536     IN      DWORD          dwControlFlags,
1537     IN OUT  LPDWORD        lpdwBufferLength,
1538     OUT     LPWSAQUERYSETA lpqsResults);
1539
1540 INT
1541 WSAAPI
1542 WSALookupServiceNextW(
1543     IN      HANDLE         hLookup,
1544     IN      DWORD          dwControlFlags,
1545     IN OUT  LPDWORD        lpdwBufferLength,
1546     OUT     LPWSAQUERYSETW lpqsResults);
1547
1548 #ifndef _DISABLE_TIDENTS
1549 #ifdef UNICODE
1550 #define WSALookupServiceNext WSALookupServiceNextW
1551 #else /* UNICODE */
1552 #define WSALookupServiceNext WSALookupServiceNextA
1553 #endif /* UNICODE */
1554 #endif /* _DISABLE_TIDENTS */
1555
1556 INT
1557 WSAAPI
1558 WSARemoveServiceClass(
1559     IN  LPGUID lpServiceClassId);
1560
1561 INT
1562 WSAAPI
1563 WSASetServiceA(
1564     IN  LPWSAQUERYSETA   lpqsRegInfo,
1565     IN  WSAESETSERVICEOP essOperation,
1566     IN  DWORD            dwControlFlags);
1567
1568 INT
1569 WSAAPI
1570 WSASetServiceW(
1571     IN  LPWSAQUERYSETW   lpqsRegInfo,
1572     IN  WSAESETSERVICEOP essOperation,
1573     IN  DWORD            dwControlFlags);
1574
1575 #ifndef _DISABLE_TIDENTS
1576 #ifdef UNICODE
1577 #define WSASetService WSASetServiceW
1578 #else /* UNICODE */
1579 #define WSASetService WSASetServiceA
1580 #endif /* UNICODE */
1581 #endif /* _DISABLE_TIDENTS */
1582
1583 INT
1584 WSAAPI
1585 WSAStringToAddressA(
1586     IN      LPSTR AddressString,
1587     IN      INT AddressFamily,
1588     IN      LPWSAPROTOCOL_INFOA lpProtocolInfo,
1589     OUT     LPSOCKADDR lpAddress,
1590     IN OUT  LPINT lpAddressLength);
1591
1592 INT
1593 WSAAPI
1594 WSAStringToAddressW(
1595     IN      LPWSTR AddressString,
1596     IN      INT AddressFamily,
1597     IN      LPWSAPROTOCOL_INFOW lpProtocolInfo,
1598     OUT     LPSOCKADDR lpAddress,
1599     IN OUT  LPINT lpAddressLength);
1600
1601 #ifndef _DISABLE_TIDENTS
1602 #ifdef UNICODE
1603 #define WSAStringToAddress WSAStringToAddressW
1604 #else /* UNICODE */
1605 #define WSAStringToAddress WSAStringToAddressA
1606 #endif /* UNICODE */
1607 #endif /* _DISABLE_TIDENTS */
1608
1609 /* WinSock 1.1 compatible name resolution APIs */
1610
1611 LPHOSTENT
1612 WSAAPI
1613 gethostbyaddr(
1614     IN  CONST CHAR FAR* addr,
1615     IN  INT len,
1616     IN  INT type);
1617
1618 LPHOSTENT
1619 WSAAPI
1620 gethostbyname(
1621     IN  CONST CHAR FAR* name);
1622
1623 INT
1624 WSAAPI
1625 gethostname(
1626     OUT CHAR FAR* name,
1627     IN  INT namelen);
1628
1629 LPPROTOENT
1630 WSAAPI
1631 getprotobyname(
1632     IN  CONST CHAR FAR* name);
1633
1634 LPPROTOENT
1635 WSAAPI
1636 getprotobynumber(
1637     IN  INT number);
1638
1639 LPSERVENT
1640 WSAAPI
1641 getservbyname(
1642     IN  CONST CHAR FAR* name, 
1643     IN  CONST CHAR FAR* proto);
1644
1645 LPSERVENT
1646 WSAAPI
1647 getservbyport(
1648     IN  INT port, 
1649     IN  CONST CHAR FAR* proto);
1650
1651 ULONG
1652 WSAAPI
1653 inet_addr(
1654     IN  CONST CHAR FAR* cp);
1655
1656 CHAR FAR*
1657 WSAAPI
1658 inet_ntoa(
1659     IN  IN_ADDR in);
1660
1661 HANDLE
1662 WSAAPI
1663 WSAAsyncGetHostByAddr(
1664     IN  HWND hWnd,
1665     IN  UINT wMsg,
1666     IN  CONST CHAR FAR* addr, 
1667     IN  INT len,
1668     IN  INT type, 
1669     OUT CHAR FAR* buf, 
1670     IN  INT buflen);
1671
1672 HANDLE
1673 WSAAPI
1674 WSAAsyncGetHostByName(
1675     IN  HWND hWnd, 
1676     IN  UINT wMsg,  
1677     IN  CONST CHAR FAR* name, 
1678     OUT CHAR FAR* buf, 
1679     IN  INT buflen);
1680
1681 HANDLE
1682 WSAAPI
1683 WSAAsyncGetProtoByName(
1684     IN  HWND hWnd,
1685     IN  UINT wMsg,
1686     IN  CONST CHAR FAR* name,
1687     OUT CHAR FAR* buf,
1688     IN  INT buflen);
1689
1690 HANDLE
1691 WSAAPI
1692 WSAAsyncGetProtoByNumber(
1693     IN  HWND hWnd,
1694     IN  UINT wMsg,
1695     IN  INT number,
1696     OUT CHAR FAR* buf,
1697     IN  INT buflen);
1698
1699 HANDLE
1700 WSAAPI
1701 WSAAsyncGetServByName(
1702     IN  HWND hWnd,
1703     IN  UINT wMsg,
1704     IN  CONST CHAR FAR* name,
1705     IN  CONST CHAR FAR* proto,
1706     OUT CHAR FAR* buf,
1707     IN  INT buflen);
1708
1709 HANDLE
1710 WSAAPI
1711 WSAAsyncGetServByPort(
1712     IN  HWND hWnd,
1713     IN  UINT wMsg,
1714     IN  INT port,
1715     IN  CONST CHAR FAR* proto,
1716     OUT CHAR FAR* buf,
1717     IN  INT buflen);
1718
1719 INT
1720 WSAAPI
1721 WSACancelAsyncRequest(
1722     IN  HANDLE hAsyncTaskHandle);
1723
1724 INT
1725 WSAAPI
1726 WSANSPIoctl(
1727     HANDLE           hLookup,
1728     DWORD            dwControlCode,
1729     LPVOID           lpvInBuffer,
1730     DWORD            cbInBuffer,
1731     LPVOID           lpvOutBuffer,
1732     DWORD            cbOutBuffer,
1733     LPDWORD          lpcbBytesReturned,
1734     LPWSACOMPLETION  lpCompletion
1735     );
1736
1737 INT
1738 WSAAPI
1739 WSCUpdateProvider(
1740     LPGUID lpProviderId,
1741     const WCHAR FAR * lpszProviderDllPath,
1742     const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
1743     DWORD dwNumberOfEntries,
1744     LPINT lpErrno
1745     );
1746
1747 INT
1748 WSAAPI
1749 WSCWriteNameSpaceOrder (
1750     LPGUID lpProviderId,
1751     DWORD dwNumberOfEntries
1752     );
1753
1754 VOID
1755 WSAAPI
1756 freeaddrinfo(
1757     LPADDRINFO      pAddrInfo
1758     );
1759
1760 INT
1761 WSAAPI
1762 getaddrinfo(
1763     const char FAR * nodename,
1764     const char FAR * servname,
1765     const struct addrinfo FAR * hints,
1766     struct addrinfo FAR * FAR * res
1767     );
1768
1769 INT
1770 WSAAPI
1771 getnameinfo(
1772     const struct sockaddr FAR * sa,
1773     socklen_t       salen,
1774     char FAR *      host,
1775     DWORD           hostlen,
1776     char FAR *      serv,
1777     DWORD           servlen,
1778     INT             flags
1779     );
1780
1781 WINBOOL
1782 STDCALL
1783 AcceptEx(SOCKET sListenSocket,SOCKET sAcceptSocket,PVOID lpOutputBuffer,DWORD dwReceiveDataLength,DWORD dwLocalAddressLength,DWORD dwRemoteAddressLength,LPDWORD lpdwBytesReceived,LPOVERLAPPED lpOverlapped);
1784 INT
1785 STDCALL
1786 EnumProtocolsA(LPINT lpiProtocols,LPVOID lpProtocolBuffer,LPDWORD lpdwBufferLength);
1787 INT
1788 STDCALL
1789 EnumProtocolsW(LPINT lpiProtocols,LPVOID lpProtocolBuffer,LPDWORD lpdwBufferLength);
1790 VOID
1791 STDCALL
1792 GetAcceptExSockaddrs(PVOID lpOutputBuffer,DWORD dwReceiveDataLength,DWORD dwLocalAddressLength,DWORD dwRemoteAddressLength,struct sockaddr **LocalSockaddr,LPINT LocalSockaddrLength,struct sockaddr **RemoteSockaddr,LPINT RemoteSockaddrLength);
1793 INT
1794 STDCALL
1795 GetAddressByNameA(DWORD dwNameSpace,LPGUID lpServiceType,LPSTR lpServiceName,LPINT lpiProtocols,DWORD dwResolution,LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,LPVOID lpCsaddrBuffer,LPDWORD lpdwBufferLength,LPSTR lpAliasBuffer,LPDWORD lpdwAliasBufferLength);
1796 INT
1797 STDCALL
1798 GetAddressByNameW(DWORD dwNameSpace,LPGUID lpServiceType,LPWSTR lpServiceName,LPINT lpiProtocols,DWORD dwResolution,LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,LPVOID lpCsaddrBuffer,LPDWORD lpdwBufferLength,LPWSTR lpAliasBuffer,LPDWORD lpdwAliasBufferLength);
1799 INT
1800 STDCALL
1801 GetNameByTypeA(LPGUID lpServiceType,LPSTR lpServiceName,DWORD dwNameLength);
1802 INT
1803 STDCALL
1804 GetNameByTypeW(LPGUID lpServiceType,LPWSTR lpServiceName,DWORD dwNameLength);
1805 INT
1806 STDCALL
1807 GetServiceA(DWORD dwNameSpace,LPGUID lpGuid,LPSTR lpServiceName,DWORD dwProperties,LPVOID lpBuffer,LPDWORD lpdwBufferSize,LPSERVICE_ASYNC_INFO lpServiceAsyncInfo);
1808 INT
1809 STDCALL
1810 GetServiceW(DWORD dwNameSpace,LPGUID lpGuid,LPWSTR lpServiceName,DWORD dwProperties,LPVOID lpBuffer,LPDWORD lpdwBufferSize,LPSERVICE_ASYNC_INFO lpServiceAsyncInfo);
1811 INT
1812 STDCALL
1813 GetTypeByNameA(LPSTR lpServiceName,LPGUID lpServiceType);
1814 INT
1815 STDCALL
1816 GetTypeByNameW(LPWSTR lpServiceName,LPGUID lpServiceType);
1817 INT
1818 STDCALL
1819 SetServiceA(DWORD dwNameSpace,DWORD dwOperation,DWORD dwFlags,LPSERVICE_INFOA lpServiceInfo,LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,LPDWORD lpdwStatusFlags);
1820 INT
1821 STDCALL
1822 SetServiceW(DWORD dwNameSpace,DWORD dwOperation,DWORD dwFlags,LPSERVICE_INFOW lpServiceInfo,LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,LPDWORD lpdwStatusFlags);
1823 WINBOOL
1824 STDCALL
1825 TransmitFile(SOCKET hSocket,HANDLE hFile,DWORD nNumberOfBytesToWrite,DWORD nNumberOfBytesPerSend,LPOVERLAPPED lpOverlapped,LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers,DWORD dwReserved);
1826 INT
1827 STDCALL
1828 WSARecvEx(SOCKET s,LPSTR buf,INT len,LPINT flags);
1829
1830 struct netent * STDCALL getnetbyname(const char *name);
1831 void STDCALL s_perror(LPCSTR message);
1832 UINT STDCALL inet_network(const char *cp);
1833 BOOL STDCALL WSApSetPostRoutine(PVOID Routine);
1834
1835 typedef  DWORD (* LPFN_NSPAPI) (VOID ) ;
1836
1837 typedef struct _NS_ROUTINE {
1838     DWORD        dwFunctionCount;
1839     LPFN_NSPAPI *alpfnFunctions;
1840     DWORD        dwNameSpace;
1841     DWORD        dwPriority;
1842 } NS_ROUTINE, *PNS_ROUTINE, * FAR LPNS_ROUTINE;
1843
1844 INT
1845 APIENTRY
1846 NPLoadNameSpaces (
1847     IN OUT LPDWORD         lpdwVersion,
1848     IN OUT LPNS_ROUTINE    nsrBuffer,
1849     IN OUT LPDWORD         lpdwBufferLength
1850     );
1851
1852 #ifdef __cplusplus
1853 };
1854 #endif /* __cplusplus */
1855
1856 #endif /* !__USE_W32API */
1857
1858 #endif /* __WINSOCK2_H */
1859
1860 /* EOF */