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)
18 #endif /* __cplusplus */
20 #define WSAAPI STDCALL
24 typedef struct _GUID {
29 } GUID, *PGUID, *LPGUID;
34 #define INVALID_SOCKET ((SOCKET)~0)
35 #define SOCKET_ERROR (-1)
42 #define SOCK_SEQPACKET 5
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
55 #define SO_DONTLINGER (UINT)(~SO_LINGER)
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
67 /* Address families */
85 #define AF_APPLETALK 16
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
97 #define PF_CHAOS AF_CHAOS
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
111 #define PF_MAX AF_MAX
114 #define SOL_SOCKET 0xffff
120 #define MSG_DONTROUTE 0x4
122 #define MSG_MAXIOVLEN 16
126 #define FD_WRITE 0x02
128 #define FD_ACCEPT 0x08
129 #define FD_CONNECT 0x10
130 #define FD_CLOSE 0x20
132 #define FD_MAX_EVENTS 6
133 #define FD_ALL_EVENTS ((1 << FD_MAX_EVENTS) - 1)
138 #define WSABASEERR 10000
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)
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)
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)
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
207 #define WSAEVENT HANDLE
208 #define LPWSAEVENT LPHANDLE
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)
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)
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)
233 #define _IO(x, y) (IOC_VOID|(x<<8)|y)
235 #define _IOR(x, y, t) (IOC_OUT|(((LONG)sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)
237 #define _IOW(x, y, t) (IOC_IN|(((LONG)sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)
239 #define FIONREAD _IOR('f', 127, ULONG)
240 #define FIONBIO _IOW('f', 126, ULONG)
241 #define FIOASYNC _IOW('f', 125, ULONG)
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)
253 struct { UCHAR s_b1, s_b2,s_b3,s_b4; } S_un_b;
254 struct { USHORT s_w1,s_w2; } S_un_w;
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
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.
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
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
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
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)
293 #define ADDR_ANY INADDR_ANY
319 struct in_addr sin_addr;
323 #define INADDR_ANY ((ULONG)0x00000000)
324 #define INADDR_LOOPBACK ((ULONG)0x7f000001)
325 #define INADDR_BROADCAST ((ULONG)0xffffffff)
326 #define INADDR_NONE ((ULONG)0xffffffff)
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
342 #define FD_SETSIZE 64
343 #endif /* FD_SETSIZE */
345 typedef struct fd_set {
347 SOCKET fd_array[FD_SETSIZE];
350 extern INT PASCAL FAR __WSAFDIsSet(SOCKET, fd_set FAR*);
352 #define FD_CLR(s, set) do { \
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]; \
361 ((fd_set FAR *)(set))->fd_count--; \
367 #define FD_SET(s, set) do { \
369 for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count; __i++) { \
370 if (((fd_set FAR *)(set))->fd_array[__i] == (s)) { \
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++; \
382 #define FD_ISSET(s, set) __WSAFDIsSet((SOCKET)(s), (fd_set FAR*)(set))
384 #define FD_ZERO(set) (((fd_set FAR*)(set))->fd_count = 0)
387 typedef struct _WSAOVERLAPPED {
388 DWORD Internal; // reserved
389 DWORD InternalHigh; // reserved
390 DWORD Offset; // reserved
391 DWORD OffsetHigh; // reserved
393 } WSAOVERLAPPED, FAR* LPWSAOVERLAPPED;
396 typedef struct __WSABUF {
397 ULONG len; // buffer length
398 CHAR FAR* buf; // pointer to buffer
399 } WSABUF, FAR* LPWSABUF;
402 typedef ULONG SERVICETYPE;
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
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;
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 */
433 typedef struct _WSANETWORKEVENTS {
435 INT iErrorCode[FD_MAX_EVENTS];
436 } WSANETWORKEVENTS, FAR* LPWSANETWORKEVENTS;
439 #define MAX_PROTOCOL_CHAIN 7
441 #define BASE_PROTOCOL 1
442 #define LAYERED_PROTOCOL 0
444 typedef struct _WSAPROTOCOLCHAIN {
446 DWORD ChainEntries[MAX_PROTOCOL_CHAIN];
447 } WSAPROTOCOLCHAIN, FAR* LPWSAPROTOCOLCHAIN;
449 #define WSAPROTOCOL_LEN 255
451 typedef struct _WSAPROTOCOL_INFOA {
452 DWORD dwServiceFlags1;
453 DWORD dwServiceFlags2;
454 DWORD dwServiceFlags3;
455 DWORD dwServiceFlags4;
456 DWORD dwProviderFlags;
458 DWORD dwCatalogEntryId;
459 WSAPROTOCOLCHAIN ProtocolChain;
466 INT iProtocolMaxOffset;
467 INT iNetworkByteOrder;
470 DWORD dwProviderReserved;
471 CHAR szProtocol[WSAPROTOCOL_LEN + 1];
472 } WSAPROTOCOL_INFOA, FAR* LPWSAPROTOCOL_INFOA;
474 typedef struct _WSAPROTOCOL_INFOW {
475 DWORD dwServiceFlags1;
476 DWORD dwServiceFlags2;
477 DWORD dwServiceFlags3;
478 DWORD dwServiceFlags4;
479 DWORD dwProviderFlags;
481 DWORD dwCatalogEntryId;
482 WSAPROTOCOLCHAIN ProtocolChain;
489 INT iProtocolMaxOffset;
490 INT iNetworkByteOrder;
493 DWORD dwProviderReserved;
494 WCHAR szProtocol[WSAPROTOCOL_LEN + 1];
495 } WSAPROTOCOL_INFOW, FAR * LPWSAPROTOCOL_INFOW;
498 typedef WSAPROTOCOL_INFOW WSAPROTOCOL_INFO;
499 typedef LPWSAPROTOCOL_INFOW LPWSAPROTOCOL_INFO;
501 typedef WSAPROTOCOL_INFOA WSAPROTOCOL_INFO;
502 typedef LPWSAPROTOCOL_INFOA LPWSAPROTOCOL_INFO;
506 /* WinSock 2 extended commands for WSAIoctl() */
508 #define IOC_UNIX 0x00000000
509 #define IOC_WS2 0x08000000
510 #define IOC_FAMILY 0x10000000
511 #define IOC_VENDOR 0x18000000
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))
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)
538 /* Structures for WinSock 1.1 compatible namespace resolution */
542 CHAR FAR* FAR* h_aliases;
545 CHAR FAR* FAR* h_addr_list;
546 #define h_addr h_addr_list[0] /* Backward compatible field name */
551 CHAR FAR* FAR* p_aliases;
557 CHAR FAR* FAR* s_aliases;
562 // It is assumed here that a network number fits in 32 bits.
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
575 (CALLBACK * LPCONDITIONPROC)(
577 LPWSABUF lpCallerData,
581 LPWSABUF lpCalleeData,
583 DWORD dwCallbackData);
587 (CALLBACK* LPWSAOVERLAPPED_COMPLETION_ROUTINE)(
590 LPWSAOVERLAPPED lpOverlapped,
594 /* Microsoft Windows extended data types */
596 typedef struct sockaddr SOCKADDR;
597 typedef struct sockaddr *PSOCKADDR;
598 typedef struct sockaddr FAR *LPSOCKADDR;
600 typedef struct sockaddr_in SOCKADDR_IN;
601 typedef struct sockaddr_in *PSOCKADDR_IN;
602 typedef struct sockaddr_in FAR *LPSOCKADDR_IN;
604 typedef struct linger LINGER;
605 typedef struct linger *PLINGER;
606 typedef struct linger FAR *LPLINGER;
608 typedef struct in_addr IN_ADDR;
609 typedef struct in_addr *PIN_ADDR;
610 typedef struct in_addr FAR *LPIN_ADDR;
612 typedef struct fd_set FD_SET;
613 typedef struct fd_set *PFD_SET;
614 typedef struct fd_set FAR *LPFD_SET;
616 typedef struct hostent HOSTENT;
617 typedef struct hostent *PHOSTENT;
618 typedef struct hostent FAR *LPHOSTENT;
620 typedef struct servent SERVENT;
621 typedef struct servent *PSERVENT;
622 typedef struct servent FAR *LPSERVENT;
624 typedef struct protoent PROTOENT;
625 typedef struct protoent *PPROTOENT;
626 typedef struct protoent FAR *LPPROTOENT;
628 typedef struct timeval TIMEVAL;
629 typedef struct timeval *PTIMEVAL;
630 typedef struct timeval FAR *LPTIMEVAL;
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)
640 #define WSADESCRIPTION_LEN 256
641 #define WSASYS_STATUS_LEN 128
643 typedef struct WSAData {
646 CHAR szDescription[WSADESCRIPTION_LEN + 1];
647 CHAR szSystemStatus[WSASYS_STATUS_LEN + 1];
650 CHAR FAR* lpVendorInfo;
651 } WSADATA, FAR* LPWSADATA;
653 #ifndef _BLOB_DEFINED
654 #define _BLOB_DEFINED
655 typedef struct _BLOB {
660 typedef BLOB *LPBLOB;
663 typedef struct _SOCKET_ADDRESS {
664 LPSOCKADDR lpSockaddr;
666 } SOCKET_ADDRESS, *PSOCKET_ADDRESS, FAR* LPSOCKET_ADDRESS;
668 typedef struct _SOCKET_ADDRESS_LIST {
670 SOCKET_ADDRESS Address[1];
671 } SOCKET_ADDRESS_LIST, FAR* LPSOCKET_ADDRESS_LIST;
673 typedef struct _CSADDR_INFO {
674 SOCKET_ADDRESS LocalAddr;
675 SOCKET_ADDRESS RemoteAddr;
678 } CSADDR_INFO, *PCSADDR_INFO, FAR* LPCSADDR_INFO;
681 /* Structures for namespace resolution */
683 typedef struct _WSANAMESPACE_INFOA {
688 LPSTR lpszIdentifier;
689 } WSANAMESPACE_INFOA, *PWSANAMESPACE_INFOA, *LPWSANAMESPACE_INFOA;
691 typedef struct _WSANAMESPACE_INFOW {
696 LPWSTR lpszIdentifier;
697 } WSANAMESPACE_INFOW, *PWSANAMESPACE_INFOW, *LPWSANAMESPACE_INFOW;
700 typedef WSANAMESPACE_INFOW WSANAMESPACE_INFO;
701 typedef PWSANAMESPACE_INFOW PWSANAMESPACE_INFO;
702 typedef LPWSANAMESPACE_INFOW LPWSANAMESPACE_INFO;
704 typedef WSANAMESPACE_INFOA WSANAMESPACE_INFO;
705 typedef PWSANAMESPACE_INFOA PWSANAMESPACE_INFO;
706 typedef LPWSANAMESPACE_INFOA LPWSANAMESPACE_INFO;
710 typedef enum _WSAEcomparator
714 } WSAECOMPARATOR, *PWSAECOMPARATOR, *LPWSAECOMPARATOR;
716 typedef struct _WSAVersion
719 WSAECOMPARATOR ecHow;
720 }WSAVERSION, *PWSAVERSION, *LPWSAVERSION;
723 typedef struct _AFPROTOCOLS {
726 } AFPROTOCOLS, *PAFPROTOCOLS, *LPAFPROTOCOLS;
729 typedef struct _WSAQuerySetA {
731 LPSTR lpszServiceInstanceName;
732 LPGUID lpServiceClassId;
733 LPWSAVERSION lpVersion;
736 LPGUID lpNSProviderId;
738 DWORD dwNumberOfProtocols;
739 LPAFPROTOCOLS lpafpProtocols;
740 LPSTR lpszQueryString;
741 DWORD dwNumberOfCsAddrs;
742 LPCSADDR_INFO lpcsaBuffer;
745 } WSAQUERYSETA, *PWSAQUERYSETA, *LPWSAQUERYSETA;
747 typedef struct _WSAQuerySetW {
749 LPWSTR lpszServiceInstanceName;
750 LPGUID lpServiceClassId;
751 LPWSAVERSION lpVersion;
754 LPGUID lpNSProviderId;
756 DWORD dwNumberOfProtocols;
757 LPAFPROTOCOLS lpafpProtocols;
758 LPWSTR lpszQueryString;
759 DWORD dwNumberOfCsAddrs;
760 LPCSADDR_INFO lpcsaBuffer;
763 } WSAQUERYSETW, *PWSAQUERYSETW, *LPWSAQUERYSETW;
766 typedef WSAQUERYSETW WSAQUERYSET;
767 typedef PWSAQUERYSETW PWSAQUERYSET;
768 typedef LPWSAQUERYSETW LPWSAQUERYSET;
770 typedef WSAQUERYSETA WSAQUERYSET;
771 typedef PWSAQUERYSETA PWSAQUERYSET;
772 typedef LPWSAQUERYSETA LPWSAQUERYSET;
776 typedef enum _WSAESETSERVICEOP {
777 RNRSERVICE_REGISTER = 0,
778 RNRSERVICE_DEREGISTER,
780 } WSAESETSERVICEOP, *PWSAESETSERVICEOP, *LPWSAESETSERVICEOP;
783 typedef struct _WSANSClassInfoA {
789 } WSANSCLASSINFOA, *PWSANSCLASSINFOA, *LPWSANSCLASSINFOA;
791 typedef struct _WSANSClassInfoW {
797 } WSANSCLASSINFOW, *PWSANSCLASSINFOW, *LPWSANSCLASSINFOW;
800 typedef WSANSCLASSINFOW WSANSCLASSINFO;
801 typedef PWSANSCLASSINFOW PWSANSCLASSINFO;
802 typedef LPWSANSCLASSINFOW LPWSANSCLASSINFO;
804 typedef WSANSCLASSINFOA WSANSCLASSINFO;
805 typedef PWSANSCLASSINFOA PWSANSCLASSINFO;
806 typedef LPWSANSCLASSINFOA LPWSANSCLASSINFO;
809 typedef struct _WSAServiceClassInfoA {
810 LPGUID lpServiceClassId;
811 LPSTR lpszServiceClassName;
813 LPWSANSCLASSINFOA lpClassInfos;
814 } WSASERVICECLASSINFOA, *PWSASERVICECLASSINFOA, *LPWSASERVICECLASSINFOA;
816 typedef struct _WSAServiceClassInfoW {
817 LPGUID lpServiceClassId;
818 LPWSTR lpszServiceClassName;
820 LPWSANSCLASSINFOW lpClassInfos;
821 } WSASERVICECLASSINFOW, *PWSASERVICECLASSINFOW, *LPWSASERVICECLASSINFOW;
824 typedef WSASERVICECLASSINFOW WSASERVICECLASSINFO;
825 typedef PWSASERVICECLASSINFOW PWSASERVICECLASSINFO;
826 typedef LPWSASERVICECLASSINFOW LPWSASERVICECLASSINFO;
828 typedef WSASERVICECLASSINFOA WSASERVICECLASSINFO;
829 typedef PWSASERVICECLASSINFOA PWSASERVICECLASSINFO;
830 typedef LPWSASERVICECLASSINFOA LPWSASERVICECLASSINFO;
834 /* WinSock 2 DLL prototypes */
841 OUT INT FAR* addrlen);
847 IN CONST LPSOCKADDR name,
859 IN CONST LPSOCKADDR name,
867 IN OUT INT FAR* namelen);
874 IN OUT INT FAR* namelen);
882 OUT CHAR FAR* optval,
883 IN OUT INT FAR* optlen);
893 IN USHORT hostshort);
900 IN OUT ULONG FAR* argp);
934 IN OUT INT FAR* fromlen);
940 IN OUT LPFD_SET readfds,
941 IN OUT LPFD_SET writefds,
942 IN OUT LPFD_SET exceptfds,
943 IN CONST LPTIMEVAL timeout);
949 IN CONST CHAR FAR* buf,
957 IN CONST CHAR FAR* buf,
960 IN CONST LPSOCKADDR to,
969 IN CONST CHAR FAR* optval,
990 IN OUT LPINT addrlen,
991 IN LPCONDITIONPROC lpfnCondition,
992 IN DWORD dwCallbackData);
1004 WSACancelBlockingCall(VOID);
1013 IN WSAEVENT hEvent);
1019 IN CONST LPSOCKADDR name,
1021 IN LPWSABUF lpCallerData,
1022 OUT LPWSABUF lpCalleeData,
1028 WSACreateEvent(VOID);
1032 WSADuplicateSocketA(
1034 IN DWORD dwProcessId,
1035 OUT LPWSAPROTOCOL_INFOA lpProtocolInfo);
1039 WSADuplicateSocketW(
1041 IN DWORD dwProcessId,
1042 OUT LPWSAPROTOCOL_INFOW lpProtocolInfo);
1045 #define WSADuplicateSocket WSADuplicateSocketA
1047 #define WSADuplicateSocket WSADuplicateSocketW
1048 #endif /* UNICODE */
1052 WSAEnumNetworkEvents(
1054 IN WSAEVENT hEventObject,
1055 OUT LPWSANETWORKEVENTS lpNetworkEvents);
1060 IN LPINT lpiProtocols,
1061 OUT LPWSAPROTOCOL_INFOA lpProtocolBuffer,
1062 IN OUT LPDWORD lpdwBufferLength);
1067 IN LPINT lpiProtocols,
1068 OUT LPWSAPROTOCOL_INFOW lpProtocolBuffer,
1069 IN OUT LPDWORD lpdwBufferLength);
1072 #define WSAEnumProtocols WSAEnumProtocolsA
1074 #define WSAEnumProtocols WSAEnumProtocolsW
1075 #endif /* UNICODE */
1081 IN WSAEVENT hEventObject,
1082 IN LONG lNetworkEvents);
1086 WSAGetLastError(VOID);
1090 WSAGetOverlappedResult(
1092 IN LPWSAOVERLAPPED lpOverlapped,
1093 OUT LPDWORD lpcbTransfer,
1095 OUT LPDWORD lpdwFlags);
1101 IN OUT LPWSABUF lpQOSName,
1109 OUT ULONG FAR* lpnetlong);
1115 IN USHORT hostshort,
1116 OUT USHORT FAR* lpnetshort);
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);
1133 WSAIsBlocking(VOID);
1139 IN CONST LPSOCKADDR name,
1141 IN LPWSABUF lpCallerData,
1142 OUT LPWSABUF lpCalleeData,
1152 OUT ULONG FAR* lphostlong);
1159 OUT USHORT FAR* lphostshort);
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);
1176 OUT LPWSABUF lpInboundDisconnectData);
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);
1194 IN WSAEVENT hEvent);
1200 IN LPWSABUF lpBuffers,
1201 IN DWORD dwBufferCount,
1202 OUT LPDWORD lpNumberOfBytesSent,
1204 IN LPWSAOVERLAPPED lpOverlapped,
1205 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
1211 IN LPWSABUF lpOutboundDisconnectData);
1217 IN LPWSABUF lpBuffers,
1218 IN DWORD dwBufferCount,
1219 OUT LPDWORD lpNumberOfBytesSent,
1221 IN CONST LPSOCKADDR lpTo,
1223 IN LPWSAOVERLAPPED lpOverlapped,
1224 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
1229 IN FARPROC lpBlockFunc);
1234 IN WSAEVENT hEvent);
1247 IN LPWSAPROTOCOL_INFOA lpProtocolInfo,
1257 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
1262 #define WSASocket WSASocketW
1264 #define WSASocket WSASocketA
1265 #endif /* UNICODE */
1270 IN WORD wVersionRequested,
1271 OUT LPWSADATA lpWSAData);
1275 WSAUnhookBlockingHook(VOID);
1279 WSAWaitForMultipleEvents(
1281 IN CONST WSAEVENT FAR* lphEvents,
1284 IN BOOL fAlertable);
1288 WSAProviderConfigChange(
1289 IN OUT LPHANDLE lpNotificationHandle,
1290 IN LPWSAOVERLAPPED lpOverlapped,
1291 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
1293 /* Name resolution APIs */
1297 WSAAddressToStringA(
1298 IN LPSOCKADDR lpsaAddress,
1299 IN DWORD dwAddressLength,
1300 IN LPWSAPROTOCOL_INFOA lpProtocolInfo,
1301 OUT LPSTR lpszAddressString,
1302 IN OUT LPDWORD lpdwAddressStringLength);
1306 WSAAddressToStringW(
1307 IN LPSOCKADDR lpsaAddress,
1308 IN DWORD dwAddressLength,
1309 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
1310 OUT LPWSTR lpszAddressString,
1311 IN OUT LPDWORD lpdwAddressStringLength);
1314 #define WSAAddressToString WSAAddressToStringW
1316 #define WSAAddressToString WSAAddressToStringA
1317 #endif /* UNICODE */
1321 WSAEnumNameSpaceProvidersA(
1322 IN OUT LPDWORD lpdwBufferLength,
1323 OUT LPWSANAMESPACE_INFOA lpnspBuffer);
1327 WSAEnumNameSpaceProvidersW(
1328 IN OUT LPDWORD lpdwBufferLength,
1329 OUT LPWSANAMESPACE_INFOW lpnspBuffer);
1332 #define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersW
1334 #define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersA
1335 #endif /* UNICODE */
1339 WSAGetServiceClassInfoA(
1340 IN LPGUID lpProviderId,
1341 IN LPGUID lpServiceClassId,
1342 IN OUT LPDWORD lpdwBufferLength,
1343 OUT LPWSASERVICECLASSINFOA lpServiceClassInfo);
1347 WSAGetServiceClassInfoW(
1348 IN LPGUID lpProviderId,
1349 IN LPGUID lpServiceClassId,
1350 IN OUT LPDWORD lpdwBufferLength,
1351 OUT LPWSASERVICECLASSINFOW lpServiceClassInfo);
1354 #define WSAGetServiceClassInfo WSAGetServiceClassInfoW
1356 #define WSAGetServiceClassInfo WSAGetServiceClassInfoA
1357 #endif /* UNICODE */
1361 WSAGetServiceClassNameByClassIdA(
1362 IN LPGUID lpServiceClassId,
1363 OUT LPSTR lpszServiceClassName,
1364 IN OUT LPDWORD lpdwBufferLength);
1368 WSAGetServiceClassNameByClassIdW(
1369 IN LPGUID lpServiceClassId,
1370 OUT LPWSTR lpszServiceClassName,
1371 IN OUT LPDWORD lpdwBufferLength);
1374 #define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdW
1376 #define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdA
1377 #endif /* UNICODE */
1381 WSAInstallServiceClassA(
1382 IN LPWSASERVICECLASSINFOA lpServiceClassInfo);
1386 WSAInstallServiceClassW(
1387 IN LPWSASERVICECLASSINFOW lpServiceClassInfo);
1390 #define WSAInstallServiceClass WSAInstallServiceClassW
1392 #define WSAInstallServiceClass WSAInstallServiceClassA
1393 #endif /* UNICODE */
1397 WSALookupServiceBegin(
1398 IN LPWSAQUERYSET lpqsRestrictions,
1399 IN DWORD dwControlFlags,
1400 OUT LPHANDLE lphLookup);
1404 WSALookupServiceEnd(
1409 WSALookupServiceNext(
1411 IN DWORD dwControlFlags,
1412 IN OUT LPDWORD lpdwBufferLength,
1413 OUT LPWSAQUERYSET lpqsResults);
1417 WSARemoveServiceClass(
1418 IN LPGUID lpServiceClassId);
1423 IN LPWSAQUERYSET lpqsRegInfo,
1424 IN WSAESETSERVICEOP essOperation,
1425 IN DWORD dwControlFlags);
1429 WSAStringToAddressA(
1430 IN LPSTR AddressString,
1431 IN INT AddressFamily,
1432 IN LPWSAPROTOCOL_INFOA lpProtocolInfo,
1433 OUT LPSOCKADDR lpAddress,
1434 IN OUT LPINT lpAddressLength);
1438 WSAStringToAddressW(
1439 IN LPWSTR AddressString,
1440 IN INT AddressFamily,
1441 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
1442 OUT LPSOCKADDR lpAddress,
1443 IN OUT LPINT lpAddressLength);
1446 #define WSAStringToAddress WSAStringToAddressW
1448 #define WSAStringToAddress WSAStringToAddressA
1449 #endif /* UNICODE */
1451 /* WinSock 1.1 compatible name resolution APIs */
1456 IN CONST CHAR FAR* addr,
1463 IN CONST CHAR FAR* name);
1474 IN CONST CHAR FAR* name);
1484 IN CONST CHAR FAR* name,
1485 IN CONST CHAR FAR* proto);
1491 IN CONST CHAR FAR* proto);
1496 IN CONST CHAR FAR* cp);
1505 WSAAsyncGetHostByAddr(
1508 IN CONST CHAR FAR* addr,
1516 WSAAsyncGetHostByName(
1519 IN CONST CHAR FAR* name,
1525 WSAAsyncGetProtoByName(
1528 IN CONST CHAR FAR* name,
1534 WSAAsyncGetProtoByNumber(
1543 WSAAsyncGetServByName(
1546 IN CONST CHAR FAR* name,
1547 IN CONST CHAR FAR* proto,
1553 WSAAsyncGetServByPort(
1557 IN CONST CHAR FAR* proto,
1563 WSACancelAsyncRequest(
1564 IN HANDLE hAsyncTaskHandle);
1568 #endif /* __cplusplus */
1570 #endif /* __WINSOCK2_H */