264cf27231aad0adc50869a012ffec405f7f159a
[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 #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 struct timeval {
267 LONG tv_sec;
268 LONG tv_usec;
269 };
270
271
272 struct sockaddr {
273 USHORT sa_family;
274 CHAR sa_data[14];
275 };
276
277
278 struct linger {
279 USHORT l_onoff;
280 USHORT l_linger;
281 };
282
283
284 /* IP specific */
285
286 struct sockaddr_in {
287 SHORT sin_family;
288 USHORT sin_port;
289 struct in_addr sin_addr;
290 CHAR sin_zero[8];
291 };
292
293 #define INADDR_ANY ((ULONG)0x00000000)
294 #define INADDR_LOOPBACK ((ULONG)0x7f000001)
295 #define INADDR_BROADCAST ((ULONG)0xffffffff)
296 #define INADDR_NONE ((ULONG)0xffffffff)
297
298 #define IPPROTO_IP 0
299 #define IPPROTO_ICMP 1
300 #define IPPROTO_IGMP 2
301 #define IPPROTO_GGP 3
302 #define IPPROTO_TCP 6
303 #define IPPROTO_PUP 12
304 #define IPPROTO_UDP 17
305 #define IPPROTO_IDP 22
306 #define IPPROTO_ND 77
307 #define IPPROTO_RAW 255
308 #define IPPROTO_MAX 256
309
310
311 #ifndef FD_SETSIZE
312 #define FD_SETSIZE 64
313 #endif /* FD_SETSIZE */
314
315 typedef struct fd_set {
316 UINT fd_count;
317 SOCKET fd_array[FD_SETSIZE];
318 } fd_set;
319
320 extern INT PASCAL FAR __WSAFDIsSet(SOCKET, fd_set FAR*);
321
322 #define FD_CLR(s, set) do { \
323 UINT __i; \
324 for (__i = 0; __i < ((fd_set FAR*)(set))->fd_count; __i++) { \
325 if (((fd_set FAR*)(set))->fd_array[__i] == s) { \
326 while (__i < ((fd_set FAR*)(set))->fd_count - 1) { \
327 ((fd_set FAR *)(set))->fd_array[__i] = \
328 ((fd_set FAR*)(set))->fd_array[__i+1]; \
329 __i++; \
330 } \
331 ((fd_set FAR *)(set))->fd_count--; \
332 break; \
333 } \
334 } \
335 } while(0)
336
337 #define FD_SET(s, set) do { \
338 UINT __i; \
339 for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count; __i++) { \
340 if (((fd_set FAR *)(set))->fd_array[__i] == (s)) { \
341 break; \
342 } \
343 } \
344 if (__i == ((fd_set FAR *)(set))->fd_count) { \
345 if (((fd_set FAR*)(set))->fd_count < FD_SETSIZE) { \
346 ((fd_set FAR*)(set))->fd_array[__i] = (s); \
347 ((fd_set FAR*)(set))->fd_count++; \
348 } \
349 } \
350 } while(0)
351
352 #define FD_ISSET(s, set) __WSAFDIsSet((SOCKET)(s), (fd_set FAR*)(set))
353
354 #define FD_ZERO(set) (((fd_set FAR*)(set))->fd_count = 0)
355
356
357 typedef struct _WSAOVERLAPPED {
358 DWORD Internal; // reserved
359 DWORD InternalHigh; // reserved
360 DWORD Offset; // reserved
361 DWORD OffsetHigh; // reserved
362 WSAEVENT hEvent;
363 } WSAOVERLAPPED, FAR* LPWSAOVERLAPPED;
364
365
366 typedef struct __WSABUF {
367 ULONG len; // buffer length
368 CHAR FAR* buf; // pointer to buffer
369 } WSABUF, FAR* LPWSABUF;
370
371
372 typedef ULONG SERVICETYPE;
373
374 #define SERVICETYPE_NOTRAFFIC 0x00000000
375 #define SERVICETYPE_BESTEFFORT 0x00000001
376 #define SERVICETYPE_CONTROLLEDLOAD 0x00000002
377 #define SERVICETYPE_GUARANTEED 0x00000003
378 #define SERVICETYPE_NETWORK_UNAVAILABLE 0x00000004
379 #define SERVICETYPE_GENERAL_INFORMATION 0x00000005
380 #define SERVICETYPE_NOCHANGE 0x00000006
381 #define SERVICE_IMMEDIATE_TRAFFIC_CONTROL 0x00000007
382
383 typedef struct _flowspec {
384 ULONG TokenRate; /* In Bytes/sec */
385 ULONG TokenBucketSize; /* In Bytes */
386 ULONG PeakBandwidth; /* In Bytes/sec */
387 ULONG Latency; /* In microseconds */
388 ULONG DelayVariation; /* In microseconds */
389 SERVICETYPE ServiceType;
390 ULONG MaxSduSize; /* In Bytes */
391 ULONG MinimumPolicedSize; /* In Bytes */
392 } FLOWSPEC, *PFLOWSPEC, FAR* LPFLOWSPEC;
393
394
395 typedef struct _QualityOfService {
396 FLOWSPEC SendingFlowspec; /* The flow spec for data sending */
397 FLOWSPEC ReceivingFlowspec; /* The flow spec for data receiving */
398 WSABUF ProviderSpecific; /* Additional provider specific stuff */
399 } QOS, FAR* LPQOS;
400
401
402
403 typedef struct _WSANETWORKEVENTS {
404 LONG lNetworkEvents;
405 INT iErrorCode[FD_MAX_EVENTS];
406 } WSANETWORKEVENTS, FAR* LPWSANETWORKEVENTS;
407
408
409 #define MAX_PROTOCOL_CHAIN 7
410
411 #define BASE_PROTOCOL 1
412 #define LAYERED_PROTOCOL 0
413
414 typedef struct _WSAPROTOCOLCHAIN {
415 INT ChainLen;
416 DWORD ChainEntries[MAX_PROTOCOL_CHAIN];
417 } WSAPROTOCOLCHAIN, FAR* LPWSAPROTOCOLCHAIN;
418
419 #define WSAPROTOCOL_LEN 255
420
421 typedef struct _WSAPROTOCOL_INFOA {
422 DWORD dwServiceFlags1;
423 DWORD dwServiceFlags2;
424 DWORD dwServiceFlags3;
425 DWORD dwServiceFlags4;
426 DWORD dwProviderFlags;
427 GUID ProviderId;
428 DWORD dwCatalogEntryId;
429 WSAPROTOCOLCHAIN ProtocolChain;
430 INT iVersion;
431 INT iAddressFamily;
432 INT iMaxSockAddr;
433 INT iMinSockAddr;
434 INT iSocketType;
435 INT iProtocol;
436 INT iProtocolMaxOffset;
437 INT iNetworkByteOrder;
438 INT iSecurityScheme;
439 DWORD dwMessageSize;
440 DWORD dwProviderReserved;
441 CHAR szProtocol[WSAPROTOCOL_LEN + 1];
442 } WSAPROTOCOL_INFOA, FAR* LPWSAPROTOCOL_INFOA;
443
444 typedef struct _WSAPROTOCOL_INFOW {
445 DWORD dwServiceFlags1;
446 DWORD dwServiceFlags2;
447 DWORD dwServiceFlags3;
448 DWORD dwServiceFlags4;
449 DWORD dwProviderFlags;
450 GUID ProviderId;
451 DWORD dwCatalogEntryId;
452 WSAPROTOCOLCHAIN ProtocolChain;
453 INT iVersion;
454 INT iAddressFamily;
455 INT iMaxSockAddr;
456 INT iMinSockAddr;
457 INT iSocketType;
458 INT iProtocol;
459 INT iProtocolMaxOffset;
460 INT iNetworkByteOrder;
461 INT iSecurityScheme;
462 DWORD dwMessageSize;
463 DWORD dwProviderReserved;
464 WCHAR szProtocol[WSAPROTOCOL_LEN + 1];
465 } WSAPROTOCOL_INFOW, FAR * LPWSAPROTOCOL_INFOW;
466
467 #ifdef UNICODE
468 typedef WSAPROTOCOL_INFOW WSAPROTOCOL_INFO;
469 typedef LPWSAPROTOCOL_INFOW LPWSAPROTOCOL_INFO;
470 #else /* UNICODE */
471 typedef WSAPROTOCOL_INFOA WSAPROTOCOL_INFO;
472 typedef LPWSAPROTOCOL_INFOA LPWSAPROTOCOL_INFO;
473 #endif /* UNICODE */
474
475
476 /* WinSock 2 extended commands for WSAIoctl() */
477
478 #define IOC_UNIX 0x00000000
479 #define IOC_WS2 0x08000000
480 #define IOC_FAMILY 0x10000000
481 #define IOC_VENDOR 0x18000000
482
483 #define _WSAIO (x,y) (IOC_VOID | (x) | (y))
484 #define _WSAIOR (x,y) (IOC_OUT | (x) | (y))
485 #define _WSAIOW (x,y) (IOC_IN | (x) | (y))
486 #define _WSAIORW(x,y) (IOC_INOUT| (x) | (y))
487
488 #define SIO_ASSOCIATE_HANDLE _WSAIOW (IOC_WS2, 1)
489 #define SIO_ENABLE_CIRCULAR_QUEUEING _WSAIO (IOC_WS2, 2)
490 #define SIO_FIND_ROUTE _WSAIOR (IOC_WS2, 3)
491 #define SIO_FLUSH _WSAIO (IOC_WS2, 4)
492 #define SIO_GET_BROADCAST_ADDRESS -WSAIOR (IOC_WS2, 5)
493 #define SIO_GET_EXTENSION_FUNCTION_POINTER _WSAIORW(IOC_WS2, 6)
494 #define SIO_GET_QOS _WSAIORW(IOC_WS2, 7)
495 #define SIO_GET_GROUP_QOS _WSAIORW(IOC_WS2, 8)
496 #define SIO_MULTIPOINT_LOOPBACK _WSAIOW (IOC_WS2, 9)
497 #define SIO_MULTICAST_SCOPE _WSAIOW (IOC_WS2, 10)
498 #define SIO_SET_QOS _WSAIOW (IOC_WS2, 11)
499 #define SIO_SET_GROUP_QOS _WSAIOW (IOC_WS2, 12)
500 #define SIO_TRANSLATE_HANDLE _WSAIORW(IOC_WS2, 13)
501 #define SIO_ROUTING_INTERFACE_QUERY _WSAIORW(IOC_WS2, 20)
502 #define SIO_ROUTING_INTERFACE_CHANGE _WSAIOW (IOC_WS2, 21)
503 #define SIO_ADDRESS_LIST_QUERY _WSAIOR (IOC_WS2, 22)
504 #define SIO_ADDRESS_LIST_CHANGE _WSAIO (IOC_WS2, 23)
505 #define SIO_QUERY_TARGET_PNP_HANDLE _WSAIOR (IOC_W32, 24)
506
507
508 /* Structures for WinSock 1.1 compatible namespace resolution */
509
510 struct hostent {
511 CHAR FAR* h_name;
512 CHAR FAR* FAR* h_aliases;
513 SHORT h_addrtype;
514 SHORT h_length;
515 CHAR FAR* FAR* h_addr_list;
516 #define h_addr h_addr_list[0] /* Backward compatible field name */
517 };
518
519 struct protoent {
520 CHAR FAR* p_name;
521 CHAR FAR* FAR* p_aliases;
522 SHORT p_proto;
523 };
524
525 struct servent {
526 CHAR FAR* s_name;
527 CHAR FAR* FAR* s_aliases;
528 SHORT s_port;
529 CHAR FAR* s_proto;
530 };
531
532
533 typedef UINT GROUP;
534
535 typedef
536 INT
537 (CALLBACK * LPCONDITIONPROC)(
538 LPWSABUF lpCallerId,
539 LPWSABUF lpCallerData,
540 LPQOS lpSQOS,
541 LPQOS lpGQOS,
542 LPWSABUF lpCalleeId,
543 LPWSABUF lpCalleeData,
544 GROUP FAR* g,
545 DWORD dwCallbackData);
546
547 typedef
548 VOID
549 (CALLBACK* LPWSAOVERLAPPED_COMPLETION_ROUTINE)(
550 DWORD dwError,
551 DWORD cbTransferred,
552 LPWSAOVERLAPPED lpOverlapped,
553 DWORD dwFlags);
554
555
556 /* Microsoft Windows extended data types */
557
558 typedef struct sockaddr SOCKADDR;
559 typedef struct sockaddr *PSOCKADDR;
560 typedef struct sockaddr FAR *LPSOCKADDR;
561
562 typedef struct sockaddr_in SOCKADDR_IN;
563 typedef struct sockaddr_in *PSOCKADDR_IN;
564 typedef struct sockaddr_in FAR *LPSOCKADDR_IN;
565
566 typedef struct linger LINGER;
567 typedef struct linger *PLINGER;
568 typedef struct linger FAR *LPLINGER;
569
570 typedef struct in_addr IN_ADDR;
571 typedef struct in_addr *PIN_ADDR;
572 typedef struct in_addr FAR *LPIN_ADDR;
573
574 typedef struct fd_set FD_SET;
575 typedef struct fd_set *PFD_SET;
576 typedef struct fd_set FAR *LPFD_SET;
577
578 typedef struct hostent HOSTENT;
579 typedef struct hostent *PHOSTENT;
580 typedef struct hostent FAR *LPHOSTENT;
581
582 typedef struct servent SERVENT;
583 typedef struct servent *PSERVENT;
584 typedef struct servent FAR *LPSERVENT;
585
586 typedef struct protoent PROTOENT;
587 typedef struct protoent *PPROTOENT;
588 typedef struct protoent FAR *LPPROTOENT;
589
590 typedef struct timeval TIMEVAL;
591 typedef struct timeval *PTIMEVAL;
592 typedef struct timeval FAR *LPTIMEVAL;
593
594 #define WSAMAKEASYNCREPLY(buflen,error) MAKELONG(buflen,error)
595 #define WSAMAKESELECTREPLY(event,error) MAKELONG(event,error)
596 #define WSAGETASYNCBUFLEN(lParam) LOWORD(lParam)
597 #define WSAGETASYNCERROR(lParam) HIWORD(lParam)
598 #define WSAGETSELECTEVENT(lParam) LOWORD(lParam)
599 #define WSAGETSELECTERROR(lParam) HIWORD(lParam)
600
601
602 #define WSADESCRIPTION_LEN 256
603 #define WSASYS_STATUS_LEN 128
604
605 typedef struct WSAData {
606 WORD wVersion;
607 WORD wHighVersion;
608 CHAR szDescription[WSADESCRIPTION_LEN + 1];
609 CHAR szSystemStatus[WSASYS_STATUS_LEN + 1];
610 USHORT iMaxSockets;
611 USHORT iMaxUdpDg;
612 CHAR FAR* lpVendorInfo;
613 } WSADATA, FAR* LPWSADATA;
614
615 #if 0
616 typedef struct _BLOB {
617 ULONG cbSize;
618 BYTE *pBlobData;
619 } BLOB, *LPBLOB;
620 #endif
621 typedef BLOB *LPBLOB;
622
623 typedef struct _SOCKET_ADDRESS {
624 LPSOCKADDR lpSockaddr;
625 INT iSockaddrLength;
626 } SOCKET_ADDRESS, *PSOCKET_ADDRESS, FAR* LPSOCKET_ADDRESS;
627
628 typedef struct _SOCKET_ADDRESS_LIST {
629 INT iAddressCount;
630 SOCKET_ADDRESS Address[1];
631 } SOCKET_ADDRESS_LIST, FAR* LPSOCKET_ADDRESS_LIST;
632
633 typedef struct _CSADDR_INFO {
634 SOCKET_ADDRESS LocalAddr;
635 SOCKET_ADDRESS RemoteAddr;
636 INT iSocketType;
637 INT iProtocol;
638 } CSADDR_INFO, *PCSADDR_INFO, FAR* LPCSADDR_INFO;
639
640
641 /* Structures for namespace resolution */
642
643 typedef struct _WSANAMESPACE_INFOA {
644 GUID NSProviderId;
645 DWORD dwNameSpace;
646 BOOL fActive;
647 DWORD dwVersion;
648 LPSTR lpszIdentifier;
649 } WSANAMESPACE_INFOA, *PWSANAMESPACE_INFOA, *LPWSANAMESPACE_INFOA;
650
651 typedef struct _WSANAMESPACE_INFOW {
652 GUID NSProviderId;
653 DWORD dwNameSpace;
654 BOOL fActive;
655 DWORD dwVersion;
656 LPWSTR lpszIdentifier;
657 } WSANAMESPACE_INFOW, *PWSANAMESPACE_INFOW, *LPWSANAMESPACE_INFOW;
658
659 #ifdef UNICODE
660 typedef WSANAMESPACE_INFOW WSANAMESPACE_INFO;
661 typedef PWSANAMESPACE_INFOW PWSANAMESPACE_INFO;
662 typedef LPWSANAMESPACE_INFOW LPWSANAMESPACE_INFO;
663 #else /* UNICODE */
664 typedef WSANAMESPACE_INFOA WSANAMESPACE_INFO;
665 typedef PWSANAMESPACE_INFOA PWSANAMESPACE_INFO;
666 typedef LPWSANAMESPACE_INFOA LPWSANAMESPACE_INFO;
667 #endif /* UNICODE */
668
669
670 typedef enum _WSAEcomparator
671 {
672 COMP_EQUAL = 0,
673 COMP_NOTLESS
674 } WSAECOMPARATOR, *PWSAECOMPARATOR, *LPWSAECOMPARATOR;
675
676 typedef struct _WSAVersion
677 {
678 DWORD dwVersion;
679 WSAECOMPARATOR ecHow;
680 }WSAVERSION, *PWSAVERSION, *LPWSAVERSION;
681
682
683 typedef struct _AFPROTOCOLS {
684 INT iAddressFamily;
685 INT iProtocol;
686 } AFPROTOCOLS, *PAFPROTOCOLS, *LPAFPROTOCOLS;
687
688
689 typedef struct _WSAQuerySetA {
690 DWORD dwSize;
691 LPSTR lpszServiceInstanceName;
692 LPGUID lpServiceClassId;
693 LPWSAVERSION lpVersion;
694 LPSTR lpszComment;
695 DWORD dwNameSpace;
696 LPGUID lpNSProviderId;
697 LPSTR lpszContext;
698 DWORD dwNumberOfProtocols;
699 LPAFPROTOCOLS lpafpProtocols;
700 LPSTR lpszQueryString;
701 DWORD dwNumberOfCsAddrs;
702 LPCSADDR_INFO lpcsaBuffer;
703 DWORD dwOutputFlags;
704 LPBLOB lpBlob;
705 } WSAQUERYSETA, *PWSAQUERYSETA, *LPWSAQUERYSETA;
706
707 typedef struct _WSAQuerySetW {
708 DWORD dwSize;
709 LPWSTR lpszServiceInstanceName;
710 LPGUID lpServiceClassId;
711 LPWSAVERSION lpVersion;
712 LPWSTR lpszComment;
713 DWORD dwNameSpace;
714 LPGUID lpNSProviderId;
715 LPWSTR lpszContext;
716 DWORD dwNumberOfProtocols;
717 LPAFPROTOCOLS lpafpProtocols;
718 LPWSTR lpszQueryString;
719 DWORD dwNumberOfCsAddrs;
720 LPCSADDR_INFO lpcsaBuffer;
721 DWORD dwOutputFlags;
722 LPBLOB lpBlob;
723 } WSAQUERYSETW, *PWSAQUERYSETW, *LPWSAQUERYSETW;
724
725 #ifdef UNICODE
726 typedef WSAQUERYSETW WSAQUERYSET;
727 typedef PWSAQUERYSETW PWSAQUERYSET;
728 typedef LPWSAQUERYSETW LPWSAQUERYSET;
729 #else /* UNICODE */
730 typedef WSAQUERYSETA WSAQUERYSET;
731 typedef PWSAQUERYSETA PWSAQUERYSET;
732 typedef LPWSAQUERYSETA LPWSAQUERYSET;
733 #endif /* UNICODE */
734
735
736 typedef enum _WSAESETSERVICEOP {
737 RNRSERVICE_REGISTER = 0,
738 RNRSERVICE_DEREGISTER,
739 RNRSERVICE_DELETE
740 } WSAESETSERVICEOP, *PWSAESETSERVICEOP, *LPWSAESETSERVICEOP;
741
742
743 typedef struct _WSANSClassInfoA {
744 LPSTR lpszName;
745 DWORD dwNameSpace;
746 DWORD dwValueType;
747 DWORD dwValueSize;
748 LPVOID lpValue;
749 } WSANSCLASSINFOA, *PWSANSCLASSINFOA, *LPWSANSCLASSINFOA;
750
751 typedef struct _WSANSClassInfoW {
752 LPWSTR lpszName;
753 DWORD dwNameSpace;
754 DWORD dwValueType;
755 DWORD dwValueSize;
756 LPVOID lpValue;
757 } WSANSCLASSINFOW, *PWSANSCLASSINFOW, *LPWSANSCLASSINFOW;
758
759 #ifdef UNICODE
760 typedef WSANSCLASSINFOW WSANSCLASSINFO;
761 typedef PWSANSCLASSINFOW PWSANSCLASSINFO;
762 typedef LPWSANSCLASSINFOW LPWSANSCLASSINFO;
763 #else /* UNICODE */
764 typedef WSANSCLASSINFOA WSANSCLASSINFO;
765 typedef PWSANSCLASSINFOA PWSANSCLASSINFO;
766 typedef LPWSANSCLASSINFOA LPWSANSCLASSINFO;
767 #endif /* UNICODE */
768
769 typedef struct _WSAServiceClassInfoA {
770 LPGUID lpServiceClassId;
771 LPSTR lpszServiceClassName;
772 DWORD dwCount;
773 LPWSANSCLASSINFOA lpClassInfos;
774 } WSASERVICECLASSINFOA, *PWSASERVICECLASSINFOA, *LPWSASERVICECLASSINFOA;
775
776 typedef struct _WSAServiceClassInfoW {
777 LPGUID lpServiceClassId;
778 LPWSTR lpszServiceClassName;
779 DWORD dwCount;
780 LPWSANSCLASSINFOW lpClassInfos;
781 } WSASERVICECLASSINFOW, *PWSASERVICECLASSINFOW, *LPWSASERVICECLASSINFOW;
782
783 #ifdef UNICODE
784 typedef WSASERVICECLASSINFOW WSASERVICECLASSINFO;
785 typedef PWSASERVICECLASSINFOW PWSASERVICECLASSINFO;
786 typedef LPWSASERVICECLASSINFOW LPWSASERVICECLASSINFO;
787 #else /* UNICODE */
788 typedef WSASERVICECLASSINFOA WSASERVICECLASSINFO;
789 typedef PWSASERVICECLASSINFOA PWSASERVICECLASSINFO;
790 typedef LPWSASERVICECLASSINFOA LPWSASERVICECLASSINFO;
791 #endif /* UNICODE */
792
793
794 /* WinSock 2 DLL prototypes */
795
796 SOCKET
797 WSAAPI
798 accept(
799 IN SOCKET s,
800 OUT LPSOCKADDR addr,
801 OUT INT FAR* addrlen);
802
803 INT
804 WSAAPI
805 bind(
806 IN SOCKET s,
807 IN CONST LPSOCKADDR name,
808 IN INT namelen);
809
810 INT
811 WSAAPI
812 closesocket(
813 IN SOCKET s);
814
815 INT
816 WSAAPI
817 connect(
818 IN SOCKET s,
819 IN CONST LPSOCKADDR name,
820 IN INT namelen);
821
822 INT
823 WSAAPI
824 getpeername(
825 IN SOCKET s,
826 OUT LPSOCKADDR name,
827 IN OUT INT FAR* namelen);
828
829 INT
830 WSAAPI
831 getsockname(
832 IN SOCKET s,
833 OUT LPSOCKADDR name,
834 IN OUT INT FAR* namelen);
835
836 INT
837 WSAAPI
838 getsockopt(
839 IN SOCKET s,
840 IN INT level,
841 IN INT optname,
842 OUT CHAR FAR* optval,
843 IN OUT INT FAR* optlen);
844
845 ULONG
846 WSAAPI
847 htonl(
848 IN ULONG hostlong);
849
850 USHORT
851 WSAAPI
852 htons(
853 IN USHORT hostshort);
854
855 INT
856 WSAAPI
857 ioctlsocket(
858 IN SOCKET s,
859 IN LONG cmd,
860 IN OUT ULONG FAR* argp);
861
862 INT
863 WSAAPI
864 listen(
865 IN SOCKET s,
866 IN INT backlog);
867
868 ULONG
869 WSAAPI
870 ntohl(
871 IN ULONG netlong);
872
873 USHORT
874 WSAAPI
875 ntohs(
876 IN USHORT netshort);
877
878 INT
879 WSAAPI
880 recv(
881 IN SOCKET s,
882 OUT CHAR FAR* buf,
883 IN INT len,
884 IN INT flags);
885
886 INT
887 WSAAPI
888 recvfrom(
889 IN SOCKET s,
890 OUT CHAR FAR* buf,
891 IN INT len,
892 IN INT flags,
893 OUT LPSOCKADDR from,
894 IN OUT INT FAR* fromlen);
895
896 INT
897 WSAAPI
898 select(
899 IN INT nfds,
900 IN OUT LPFD_SET readfds,
901 IN OUT LPFD_SET writefds,
902 IN OUT LPFD_SET exceptfds,
903 IN CONST LPTIMEVAL timeout);
904
905 INT
906 WSAAPI
907 send(
908 IN SOCKET s,
909 IN CONST CHAR FAR* buf,
910 IN INT len,
911 IN INT flags);
912
913 INT
914 WSAAPI
915 sendto(
916 IN SOCKET s,
917 IN CONST CHAR FAR* buf,
918 IN INT len,
919 IN INT flags,
920 IN CONST LPSOCKADDR to,
921 IN INT tolen);
922
923 INT
924 WSAAPI
925 setsockopt(
926 IN SOCKET s,
927 IN INT level,
928 IN INT optname,
929 IN CONST CHAR FAR* optval,
930 IN INT optlen);
931
932 INT
933 WSAAPI
934 shutdown(
935 IN SOCKET s,
936 IN INT how);
937
938 SOCKET
939 WSAAPI
940 socket(
941 IN INT af,
942 IN INT type,
943 IN INT protocol);
944
945 SOCKET
946 WSAAPI
947 WSAAccept(
948 IN SOCKET s,
949 OUT LPSOCKADDR addr,
950 IN OUT LPINT addrlen,
951 IN LPCONDITIONPROC lpfnCondition,
952 IN DWORD dwCallbackData);
953
954 INT
955 WSAAPI
956 WSAAsyncSelect(
957 IN SOCKET s,
958 IN HWND hWnd,
959 IN UINT wMsg,
960 IN LONG lEvent);
961
962 INT
963 WSAAPI
964 WSACancelBlockingCall(VOID);
965
966 INT
967 WSAAPI
968 WSACleanup(VOID);
969
970 BOOL
971 WSAAPI
972 WSACloseEvent(
973 IN WSAEVENT hEvent);
974
975 INT
976 WSAAPI
977 WSAConnect(
978 IN SOCKET s,
979 IN CONST LPSOCKADDR name,
980 IN INT namelen,
981 IN LPWSABUF lpCallerData,
982 OUT LPWSABUF lpCalleeData,
983 IN LPQOS lpSQOS,
984 IN LPQOS lpGQOS);
985
986 WSAEVENT
987 WSAAPI
988 WSACreateEvent(VOID);
989
990 INT
991 WSAAPI
992 WSADuplicateSocketA(
993 IN SOCKET s,
994 IN DWORD dwProcessId,
995 OUT LPWSAPROTOCOL_INFOA lpProtocolInfo);
996
997 INT
998 WSAAPI
999 WSADuplicateSocketW(
1000 IN SOCKET s,
1001 IN DWORD dwProcessId,
1002 OUT LPWSAPROTOCOL_INFOW lpProtocolInfo);
1003
1004 #ifdef UNICODE
1005 #define WSADuplicateSocket WSADuplicateSocketA
1006 #else /* UNICODE */
1007 #define WSADuplicateSocket WSADuplicateSocketW
1008 #endif /* UNICODE */
1009
1010 INT
1011 WSAAPI
1012 WSAEnumNetworkEvents(
1013 IN SOCKET s,
1014 IN WSAEVENT hEventObject,
1015 OUT LPWSANETWORKEVENTS lpNetworkEvents);
1016
1017 INT
1018 WSAAPI
1019 WSAEnumProtocolsA(
1020 IN LPINT lpiProtocols,
1021 OUT LPWSAPROTOCOL_INFOA lpProtocolBuffer,
1022 IN OUT LPDWORD lpdwBufferLength);
1023
1024 INT
1025 WSAAPI
1026 WSAEnumProtocolsW(
1027 IN LPINT lpiProtocols,
1028 OUT LPWSAPROTOCOL_INFOW lpProtocolBuffer,
1029 IN OUT LPDWORD lpdwBufferLength);
1030
1031 #ifdef UNICODE
1032 #define WSAEnumProtocols WSAEnumProtocolsA
1033 #else /* UNICODE */
1034 #define WSAEnumProtocols WSAEnumProtocolsW
1035 #endif /* UNICODE */
1036
1037 INT
1038 WSAAPI
1039 WSAEventSelect(
1040 IN SOCKET s,
1041 IN WSAEVENT hEventObject,
1042 IN LONG lNetworkEvents);
1043
1044 INT
1045 WSAAPI
1046 WSAGetLastError(VOID);
1047
1048 BOOL
1049 WSAAPI
1050 WSAGetOverlappedResult(
1051 IN SOCKET s,
1052 IN LPWSAOVERLAPPED lpOverlapped,
1053 OUT LPDWORD lpcbTransfer,
1054 IN BOOL fWait,
1055 OUT LPDWORD lpdwFlags);
1056
1057 BOOL
1058 WSAAPI
1059 WSAGetQOSByName(
1060 IN SOCKET s,
1061 IN OUT LPWSABUF lpQOSName,
1062 OUT LPQOS lpQOS);
1063
1064 INT
1065 WSAAPI
1066 WSAHtonl(
1067 IN SOCKET s,
1068 IN ULONG hostlong,
1069 OUT ULONG FAR* lpnetlong);
1070
1071 INT
1072 WSAAPI
1073 WSAHtons(
1074 IN SOCKET s,
1075 IN USHORT hostshort,
1076 OUT USHORT FAR* lpnetshort);
1077
1078 INT
1079 WSAAPI
1080 WSAIoctl(
1081 IN SOCKET s,
1082 IN DWORD dwIoControlCode,
1083 IN LPVOID lpvInBuffer,
1084 IN DWORD cbInBuffer,
1085 OUT LPVOID lpvOutBuffer,
1086 IN DWORD cbOutBuffer,
1087 OUT LPDWORD lpcbBytesReturned,
1088 IN LPWSAOVERLAPPED lpOverlapped,
1089 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
1090
1091 BOOL
1092 WSAAPI
1093 WSAIsBlocking(VOID);
1094
1095 SOCKET
1096 WSAAPI
1097 WSAJoinLeaf(
1098 IN SOCKET s,
1099 IN CONST LPSOCKADDR name,
1100 IN INT namelen,
1101 IN LPWSABUF lpCallerData,
1102 OUT LPWSABUF lpCalleeData,
1103 IN LPQOS lpSQOS,
1104 IN LPQOS lpGQOS,
1105 IN DWORD dwFlags);
1106
1107 INT
1108 WSAAPI
1109 WSANtohl(
1110 IN SOCKET s,
1111 IN ULONG netlong,
1112 OUT ULONG FAR* lphostlong);
1113
1114 INT
1115 WSAAPI
1116 WSANtohs(
1117 IN SOCKET s,
1118 IN USHORT netshort,
1119 OUT USHORT FAR* lphostshort);
1120
1121 INT
1122 WSAAPI
1123 WSARecv(
1124 IN SOCKET s,
1125 IN OUT LPWSABUF lpBuffers,
1126 IN DWORD dwBufferCount,
1127 OUT LPDWORD lpNumberOfBytesRecvd,
1128 IN OUT LPDWORD lpFlags,
1129 IN LPWSAOVERLAPPED lpOverlapped,
1130 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
1131
1132 INT
1133 WSAAPI
1134 WSARecvDisconnect(
1135 IN SOCKET s,
1136 OUT LPWSABUF lpInboundDisconnectData);
1137
1138 INT
1139 WSAAPI
1140 WSARecvFrom(
1141 IN SOCKET s,
1142 IN OUT LPWSABUF lpBuffers,
1143 IN DWORD dwBufferCount,
1144 OUT LPDWORD lpNumberOfBytesRecvd,
1145 IN OUT LPDWORD lpFlags,
1146 OUT LPSOCKADDR lpFrom,
1147 IN OUT LPINT lpFromlen,
1148 IN LPWSAOVERLAPPED lpOverlapped,
1149 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
1150
1151 BOOL
1152 WSAAPI
1153 WSAResetEvent(
1154 IN WSAEVENT hEvent);
1155
1156 INT
1157 WSAAPI
1158 WSASend(
1159 IN SOCKET s,
1160 IN LPWSABUF lpBuffers,
1161 IN DWORD dwBufferCount,
1162 OUT LPDWORD lpNumberOfBytesSent,
1163 IN DWORD dwFlags,
1164 IN LPWSAOVERLAPPED lpOverlapped,
1165 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
1166
1167 INT
1168 WSAAPI
1169 WSASendDisconnect(
1170 IN SOCKET s,
1171 IN LPWSABUF lpOutboundDisconnectData);
1172
1173 INT
1174 WSAAPI
1175 WSASendTo(
1176 IN SOCKET s,
1177 IN LPWSABUF lpBuffers,
1178 IN DWORD dwBufferCount,
1179 OUT LPDWORD lpNumberOfBytesSent,
1180 IN DWORD dwFlags,
1181 IN CONST LPSOCKADDR lpTo,
1182 IN INT iToLen,
1183 IN LPWSAOVERLAPPED lpOverlapped,
1184 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
1185
1186 FARPROC
1187 WSAAPI
1188 WSASetBlockingHook(
1189 IN FARPROC lpBlockFunc);
1190
1191 BOOL
1192 WSAAPI
1193 WSASetEvent(
1194 IN WSAEVENT hEvent);
1195
1196 VOID
1197 WSAAPI
1198 WSASetLastError(
1199 IN INT iError);
1200
1201 SOCKET
1202 WSAAPI
1203 WSASocketA(
1204 IN INT af,
1205 IN INT type,
1206 IN INT protocol,
1207 IN LPWSAPROTOCOL_INFOA lpProtocolInfo,
1208 IN GROUP g,
1209 IN DWORD dwFlags);
1210
1211 SOCKET
1212 WSAAPI
1213 WSASocketW(
1214 IN INT af,
1215 IN INT type,
1216 IN INT protocol,
1217 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
1218 IN GROUP g,
1219 IN DWORD dwFlags);
1220
1221 #ifdef UNICODE
1222 #define WSASocket WSASocketW
1223 #else /* UNICODE */
1224 #define WSASocket WSASocketA
1225 #endif /* UNICODE */
1226
1227 INT
1228 WSAAPI
1229 WSAStartup(
1230 IN WORD wVersionRequested,
1231 OUT LPWSADATA lpWSAData);
1232
1233 INT
1234 WSAAPI
1235 WSAUnhookBlockingHook(VOID);
1236
1237 DWORD
1238 WSAAPI
1239 WSAWaitForMultipleEvents(
1240 IN DWORD cEvents,
1241 IN CONST WSAEVENT FAR* lphEvents,
1242 IN BOOL fWaitAll,
1243 IN DWORD dwTimeout,
1244 IN BOOL fAlertable);
1245
1246 INT
1247 WSAAPI
1248 WSAProviderConfigChange(
1249 IN OUT LPHANDLE lpNotificationHandle,
1250 IN LPWSAOVERLAPPED lpOverlapped,
1251 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
1252
1253 /* Name resolution APIs */
1254
1255 INT
1256 WSAAPI
1257 WSAAddressToStringA(
1258 IN LPSOCKADDR lpsaAddress,
1259 IN DWORD dwAddressLength,
1260 IN LPWSAPROTOCOL_INFOA lpProtocolInfo,
1261 OUT LPSTR lpszAddressString,
1262 IN OUT LPDWORD lpdwAddressStringLength);
1263
1264 INT
1265 WSAAPI
1266 WSAAddressToStringW(
1267 IN LPSOCKADDR lpsaAddress,
1268 IN DWORD dwAddressLength,
1269 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
1270 OUT LPWSTR lpszAddressString,
1271 IN OUT LPDWORD lpdwAddressStringLength);
1272
1273 #ifdef UNICODE
1274 #define WSAAddressToString WSAAddressToStringW
1275 #else /* UNICODE */
1276 #define WSAAddressToString WSAAddressToStringA
1277 #endif /* UNICODE */
1278
1279 INT
1280 WSAAPI
1281 WSAEnumNameSpaceProvidersA(
1282 IN OUT LPDWORD lpdwBufferLength,
1283 OUT LPWSANAMESPACE_INFOA lpnspBuffer);
1284
1285 INT
1286 WSAAPI
1287 WSAEnumNameSpaceProvidersW(
1288 IN OUT LPDWORD lpdwBufferLength,
1289 OUT LPWSANAMESPACE_INFOW lpnspBuffer);
1290
1291 #ifdef UNICODE
1292 #define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersW
1293 #else /* UNICODE */
1294 #define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersA
1295 #endif /* UNICODE */
1296
1297 INT
1298 WSAAPI
1299 WSAGetServiceClassInfoA(
1300 IN LPGUID lpProviderId,
1301 IN LPGUID lpServiceClassId,
1302 IN OUT LPDWORD lpdwBufferLength,
1303 OUT LPWSASERVICECLASSINFOA lpServiceClassInfo);
1304
1305 INT
1306 WSAAPI
1307 WSAGetServiceClassInfoW(
1308 IN LPGUID lpProviderId,
1309 IN LPGUID lpServiceClassId,
1310 IN OUT LPDWORD lpdwBufferLength,
1311 OUT LPWSASERVICECLASSINFOW lpServiceClassInfo);
1312
1313 #ifdef UNICODE
1314 #define WSAGetServiceClassInfo WSAGetServiceClassInfoW
1315 #else /* UNICODE */
1316 #define WSAGetServiceClassInfo WSAGetServiceClassInfoA
1317 #endif /* UNICODE */
1318
1319 INT
1320 WSAAPI
1321 WSAGetServiceClassNameByClassIdA(
1322 IN LPGUID lpServiceClassId,
1323 OUT LPSTR lpszServiceClassName,
1324 IN OUT LPDWORD lpdwBufferLength);
1325
1326 INT
1327 WSAAPI
1328 WSAGetServiceClassNameByClassIdW(
1329 IN LPGUID lpServiceClassId,
1330 OUT LPWSTR lpszServiceClassName,
1331 IN OUT LPDWORD lpdwBufferLength);
1332
1333 #ifdef UNICODE
1334 #define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdW
1335 #else /* UNICODE */
1336 #define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdA
1337 #endif /* UNICODE */
1338
1339 INT
1340 WSAAPI
1341 WSAInstallServiceClassA(
1342 IN LPWSASERVICECLASSINFOA lpServiceClassInfo);
1343
1344 INT
1345 WSAAPI
1346 WSAInstallServiceClassW(
1347 IN LPWSASERVICECLASSINFOW lpServiceClassInfo);
1348
1349 #ifdef UNICODE
1350 #define WSAInstallServiceClass WSAInstallServiceClassW
1351 #else /* UNICODE */
1352 #define WSAInstallServiceClass WSAInstallServiceClassA
1353 #endif /* UNICODE */
1354
1355 INT
1356 WSAAPI
1357 WSALookupServiceBegin(
1358 IN LPWSAQUERYSET lpqsRestrictions,
1359 IN DWORD dwControlFlags,
1360 OUT LPHANDLE lphLookup);
1361
1362 INT
1363 WSAAPI
1364 WSALookupServiceEnd(
1365 IN HANDLE hLookup);
1366
1367 INT
1368 WSAAPI
1369 WSALookupServiceNext(
1370 IN HANDLE hLookup,
1371 IN DWORD dwControlFlags,
1372 IN OUT LPDWORD lpdwBufferLength,
1373 OUT LPWSAQUERYSET lpqsResults);
1374
1375 INT
1376 WSAAPI
1377 WSARemoveServiceClass(
1378 IN LPGUID lpServiceClassId);
1379
1380 INT
1381 WSAAPI
1382 WSASetService(
1383 IN LPWSAQUERYSET lpqsRegInfo,
1384 IN WSAESETSERVICEOP essOperation,
1385 IN DWORD dwControlFlags);
1386
1387 INT
1388 WSAAPI
1389 WSAStringToAddressA(
1390 IN LPSTR AddressString,
1391 IN INT AddressFamily,
1392 IN LPWSAPROTOCOL_INFOA lpProtocolInfo,
1393 OUT LPSOCKADDR lpAddress,
1394 IN OUT LPINT lpAddressLength);
1395
1396 INT
1397 WSAAPI
1398 WSAStringToAddressW(
1399 IN LPWSTR AddressString,
1400 IN INT AddressFamily,
1401 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
1402 OUT LPSOCKADDR lpAddress,
1403 IN OUT LPINT lpAddressLength);
1404
1405 #ifdef UNICODE
1406 #define WSAStringToAddress WSAStringToAddressW
1407 #else /* UNICODE */
1408 #define WSAStringToAddress WSAStringToAddressA
1409 #endif /* UNICODE */
1410
1411 /* WinSock 1.1 compatible name resolution APIs */
1412
1413 LPHOSTENT
1414 WSAAPI
1415 gethostbyaddr(
1416 IN CONST CHAR FAR* addr,
1417 IN INT len,
1418 IN INT type);
1419
1420 LPHOSTENT
1421 WSAAPI
1422 gethostbyname(
1423 IN CONST CHAR FAR* name);
1424
1425 INT
1426 WSAAPI
1427 gethostname(
1428 OUT CHAR FAR* name,
1429 IN INT namelen);
1430
1431 LPPROTOENT
1432 WSAAPI
1433 getprotobyname(
1434 IN CONST CHAR FAR* name);
1435
1436 LPPROTOENT
1437 WSAAPI
1438 getprotobynumber(
1439 IN INT number);
1440
1441 LPSERVENT
1442 WSAAPI
1443 getservbyname(
1444 IN CONST CHAR FAR* name,
1445 IN CONST CHAR FAR* proto);
1446
1447 LPSERVENT
1448 WSAAPI
1449 getservbyport(
1450 IN INT port,
1451 IN CONST CHAR FAR* proto);
1452
1453 ULONG
1454 WSAAPI
1455 inet_addr(
1456 IN CONST CHAR FAR* cp);
1457
1458 CHAR FAR*
1459 WSAAPI
1460 inet_ntoa(
1461 IN IN_ADDR in);
1462
1463 HANDLE
1464 WSAAPI
1465 WSAAsyncGetHostByAddr(
1466 IN HWND hWnd,
1467 IN UINT wMsg,
1468 IN CONST CHAR FAR* addr,
1469 IN INT len,
1470 IN INT type,
1471 OUT CHAR FAR* buf,
1472 IN INT buflen);
1473
1474 HANDLE
1475 WSAAPI
1476 WSAAsyncGetHostByName(
1477 IN HWND hWnd,
1478 IN UINT wMsg,
1479 IN CONST CHAR FAR* name,
1480 OUT CHAR FAR* buf,
1481 IN INT buflen);
1482
1483 HANDLE
1484 WSAAPI
1485 WSAAsyncGetProtoByName(
1486 IN HWND hWnd,
1487 IN UINT wMsg,
1488 IN CONST CHAR FAR* name,
1489 OUT CHAR FAR* buf,
1490 IN INT buflen);
1491
1492 HANDLE
1493 WSAAPI
1494 WSAAsyncGetProtoByNumber(
1495 IN HWND hWnd,
1496 IN UINT wMsg,
1497 IN INT number,
1498 OUT CHAR FAR* buf,
1499 IN INT buflen);
1500
1501 HANDLE
1502 WSAAPI
1503 WSAAsyncGetServByName(
1504 IN HWND hWnd,
1505 IN UINT wMsg,
1506 IN CONST CHAR FAR* name,
1507 IN CONST CHAR FAR* proto,
1508 OUT CHAR FAR* buf,
1509 IN INT buflen);
1510
1511 HANDLE
1512 WSAAPI
1513 WSAAsyncGetServByPort(
1514 IN HWND hWnd,
1515 IN UINT wMsg,
1516 IN INT port,
1517 IN CONST CHAR FAR* proto,
1518 OUT CHAR FAR* buf,
1519 IN INT buflen);
1520
1521 INT
1522 WSAAPI
1523 WSACancelAsyncRequest(
1524 IN HANDLE hAsyncTaskHandle);
1525
1526 #ifdef __cplusplus
1527 };
1528 #endif /* __cplusplus */
1529
1530 #endif /* __WINSOCK2_H */
1531
1532 /* EOF */