759f12bb724cd3e362ba4fa8041574f85d962ca0
[reactos.git] / reactos / 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 #ifdef __cplusplus
1831 };
1832 #endif /* __cplusplus */
1833
1834 #endif /* !__USE_W32API */
1835
1836 #endif /* __WINSOCK2_H */
1837
1838 /* EOF */