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