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
289 struct in_addr sin_addr
;
293 #define INADDR_ANY ((ULONG)0x00000000)
294 #define INADDR_LOOPBACK ((ULONG)0x7f000001)
295 #define INADDR_BROADCAST ((ULONG)0xffffffff)
296 #define INADDR_NONE ((ULONG)0xffffffff)
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
312 #define FD_SETSIZE 64
313 #endif /* FD_SETSIZE */
315 typedef struct fd_set
{
317 SOCKET fd_array
[FD_SETSIZE
];
320 extern INT PASCAL FAR
__WSAFDIsSet(SOCKET
, fd_set FAR
*);
322 #define FD_CLR(s, set) do { \
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]; \
331 ((fd_set FAR *)(set))->fd_count--; \
337 #define FD_SET(s, set) do { \
339 for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count; __i++) { \
340 if (((fd_set FAR *)(set))->fd_array[__i] == (s)) { \
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++; \
352 #define FD_ISSET(s, set) __WSAFDIsSet((SOCKET)(s), (fd_set FAR*)(set))
354 #define FD_ZERO(set) (((fd_set FAR*)(set))->fd_count = 0)
357 typedef struct _WSAOVERLAPPED
{
358 DWORD Internal
; // reserved
359 DWORD InternalHigh
; // reserved
360 DWORD Offset
; // reserved
361 DWORD OffsetHigh
; // reserved
363 } WSAOVERLAPPED
, FAR
* LPWSAOVERLAPPED
;
366 typedef struct __WSABUF
{
367 ULONG len
; // buffer length
368 CHAR FAR
* buf
; // pointer to buffer
369 } WSABUF
, FAR
* LPWSABUF
;
372 typedef ULONG SERVICETYPE
;
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
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
;
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 */
403 typedef struct _WSANETWORKEVENTS
{
405 INT iErrorCode
[FD_MAX_EVENTS
];
406 } WSANETWORKEVENTS
, FAR
* LPWSANETWORKEVENTS
;
409 #define MAX_PROTOCOL_CHAIN 7
411 #define BASE_PROTOCOL 1
412 #define LAYERED_PROTOCOL 0
414 typedef struct _WSAPROTOCOLCHAIN
{
416 DWORD ChainEntries
[MAX_PROTOCOL_CHAIN
];
417 } WSAPROTOCOLCHAIN
, FAR
* LPWSAPROTOCOLCHAIN
;
419 #define WSAPROTOCOL_LEN 255
421 typedef struct _WSAPROTOCOL_INFOA
{
422 DWORD dwServiceFlags1
;
423 DWORD dwServiceFlags2
;
424 DWORD dwServiceFlags3
;
425 DWORD dwServiceFlags4
;
426 DWORD dwProviderFlags
;
428 DWORD dwCatalogEntryId
;
429 WSAPROTOCOLCHAIN ProtocolChain
;
436 INT iProtocolMaxOffset
;
437 INT iNetworkByteOrder
;
440 DWORD dwProviderReserved
;
441 CHAR szProtocol
[WSAPROTOCOL_LEN
+ 1];
442 } WSAPROTOCOL_INFOA
, FAR
* LPWSAPROTOCOL_INFOA
;
444 typedef struct _WSAPROTOCOL_INFOW
{
445 DWORD dwServiceFlags1
;
446 DWORD dwServiceFlags2
;
447 DWORD dwServiceFlags3
;
448 DWORD dwServiceFlags4
;
449 DWORD dwProviderFlags
;
451 DWORD dwCatalogEntryId
;
452 WSAPROTOCOLCHAIN ProtocolChain
;
459 INT iProtocolMaxOffset
;
460 INT iNetworkByteOrder
;
463 DWORD dwProviderReserved
;
464 WCHAR szProtocol
[WSAPROTOCOL_LEN
+ 1];
465 } WSAPROTOCOL_INFOW
, FAR
* LPWSAPROTOCOL_INFOW
;
468 typedef WSAPROTOCOL_INFOW WSAPROTOCOL_INFO
;
469 typedef LPWSAPROTOCOL_INFOW LPWSAPROTOCOL_INFO
;
471 typedef WSAPROTOCOL_INFOA WSAPROTOCOL_INFO
;
472 typedef LPWSAPROTOCOL_INFOA LPWSAPROTOCOL_INFO
;
476 /* WinSock 2 extended commands for WSAIoctl() */
478 #define IOC_UNIX 0x00000000
479 #define IOC_WS2 0x08000000
480 #define IOC_FAMILY 0x10000000
481 #define IOC_VENDOR 0x18000000
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))
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)
508 /* Structures for WinSock 1.1 compatible namespace resolution */
512 CHAR FAR
* FAR
* h_aliases
;
515 CHAR FAR
* FAR
* h_addr_list
;
516 #define h_addr h_addr_list[0] /* Backward compatible field name */
521 CHAR FAR
* FAR
* p_aliases
;
527 CHAR FAR
* FAR
* s_aliases
;
537 (CALLBACK
* LPCONDITIONPROC
)(
539 LPWSABUF lpCallerData
,
543 LPWSABUF lpCalleeData
,
545 DWORD dwCallbackData
);
549 (CALLBACK
* LPWSAOVERLAPPED_COMPLETION_ROUTINE
)(
552 LPWSAOVERLAPPED lpOverlapped
,
556 /* Microsoft Windows extended data types */
558 typedef struct sockaddr SOCKADDR
;
559 typedef struct sockaddr
*PSOCKADDR
;
560 typedef struct sockaddr FAR
*LPSOCKADDR
;
562 typedef struct sockaddr_in SOCKADDR_IN
;
563 typedef struct sockaddr_in
*PSOCKADDR_IN
;
564 typedef struct sockaddr_in FAR
*LPSOCKADDR_IN
;
566 typedef struct linger LINGER
;
567 typedef struct linger
*PLINGER
;
568 typedef struct linger FAR
*LPLINGER
;
570 typedef struct in_addr IN_ADDR
;
571 typedef struct in_addr
*PIN_ADDR
;
572 typedef struct in_addr FAR
*LPIN_ADDR
;
574 typedef struct fd_set FD_SET
;
575 typedef struct fd_set
*PFD_SET
;
576 typedef struct fd_set FAR
*LPFD_SET
;
578 typedef struct hostent HOSTENT
;
579 typedef struct hostent
*PHOSTENT
;
580 typedef struct hostent FAR
*LPHOSTENT
;
582 typedef struct servent SERVENT
;
583 typedef struct servent
*PSERVENT
;
584 typedef struct servent FAR
*LPSERVENT
;
586 typedef struct protoent PROTOENT
;
587 typedef struct protoent
*PPROTOENT
;
588 typedef struct protoent FAR
*LPPROTOENT
;
590 typedef struct timeval TIMEVAL
;
591 typedef struct timeval
*PTIMEVAL
;
592 typedef struct timeval FAR
*LPTIMEVAL
;
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)
602 #define WSADESCRIPTION_LEN 256
603 #define WSASYS_STATUS_LEN 128
605 typedef struct WSAData
{
608 CHAR szDescription
[WSADESCRIPTION_LEN
+ 1];
609 CHAR szSystemStatus
[WSASYS_STATUS_LEN
+ 1];
612 CHAR FAR
* lpVendorInfo
;
613 } WSADATA
, FAR
* LPWSADATA
;
616 typedef struct _BLOB
{
621 typedef BLOB
*LPBLOB
;
623 typedef struct _SOCKET_ADDRESS
{
624 LPSOCKADDR lpSockaddr
;
626 } SOCKET_ADDRESS
, *PSOCKET_ADDRESS
, FAR
* LPSOCKET_ADDRESS
;
628 typedef struct _SOCKET_ADDRESS_LIST
{
630 SOCKET_ADDRESS Address
[1];
631 } SOCKET_ADDRESS_LIST
, FAR
* LPSOCKET_ADDRESS_LIST
;
633 typedef struct _CSADDR_INFO
{
634 SOCKET_ADDRESS LocalAddr
;
635 SOCKET_ADDRESS RemoteAddr
;
638 } CSADDR_INFO
, *PCSADDR_INFO
, FAR
* LPCSADDR_INFO
;
641 /* Structures for namespace resolution */
643 typedef struct _WSANAMESPACE_INFOA
{
648 LPSTR lpszIdentifier
;
649 } WSANAMESPACE_INFOA
, *PWSANAMESPACE_INFOA
, *LPWSANAMESPACE_INFOA
;
651 typedef struct _WSANAMESPACE_INFOW
{
656 LPWSTR lpszIdentifier
;
657 } WSANAMESPACE_INFOW
, *PWSANAMESPACE_INFOW
, *LPWSANAMESPACE_INFOW
;
660 typedef WSANAMESPACE_INFOW WSANAMESPACE_INFO
;
661 typedef PWSANAMESPACE_INFOW PWSANAMESPACE_INFO
;
662 typedef LPWSANAMESPACE_INFOW LPWSANAMESPACE_INFO
;
664 typedef WSANAMESPACE_INFOA WSANAMESPACE_INFO
;
665 typedef PWSANAMESPACE_INFOA PWSANAMESPACE_INFO
;
666 typedef LPWSANAMESPACE_INFOA LPWSANAMESPACE_INFO
;
670 typedef enum _WSAEcomparator
674 } WSAECOMPARATOR
, *PWSAECOMPARATOR
, *LPWSAECOMPARATOR
;
676 typedef struct _WSAVersion
679 WSAECOMPARATOR ecHow
;
680 }WSAVERSION
, *PWSAVERSION
, *LPWSAVERSION
;
683 typedef struct _AFPROTOCOLS
{
686 } AFPROTOCOLS
, *PAFPROTOCOLS
, *LPAFPROTOCOLS
;
689 typedef struct _WSAQuerySetA
{
691 LPSTR lpszServiceInstanceName
;
692 LPGUID lpServiceClassId
;
693 LPWSAVERSION lpVersion
;
696 LPGUID lpNSProviderId
;
698 DWORD dwNumberOfProtocols
;
699 LPAFPROTOCOLS lpafpProtocols
;
700 LPSTR lpszQueryString
;
701 DWORD dwNumberOfCsAddrs
;
702 LPCSADDR_INFO lpcsaBuffer
;
705 } WSAQUERYSETA
, *PWSAQUERYSETA
, *LPWSAQUERYSETA
;
707 typedef struct _WSAQuerySetW
{
709 LPWSTR lpszServiceInstanceName
;
710 LPGUID lpServiceClassId
;
711 LPWSAVERSION lpVersion
;
714 LPGUID lpNSProviderId
;
716 DWORD dwNumberOfProtocols
;
717 LPAFPROTOCOLS lpafpProtocols
;
718 LPWSTR lpszQueryString
;
719 DWORD dwNumberOfCsAddrs
;
720 LPCSADDR_INFO lpcsaBuffer
;
723 } WSAQUERYSETW
, *PWSAQUERYSETW
, *LPWSAQUERYSETW
;
726 typedef WSAQUERYSETW WSAQUERYSET
;
727 typedef PWSAQUERYSETW PWSAQUERYSET
;
728 typedef LPWSAQUERYSETW LPWSAQUERYSET
;
730 typedef WSAQUERYSETA WSAQUERYSET
;
731 typedef PWSAQUERYSETA PWSAQUERYSET
;
732 typedef LPWSAQUERYSETA LPWSAQUERYSET
;
736 typedef enum _WSAESETSERVICEOP
{
737 RNRSERVICE_REGISTER
= 0,
738 RNRSERVICE_DEREGISTER
,
740 } WSAESETSERVICEOP
, *PWSAESETSERVICEOP
, *LPWSAESETSERVICEOP
;
743 typedef struct _WSANSClassInfoA
{
749 } WSANSCLASSINFOA
, *PWSANSCLASSINFOA
, *LPWSANSCLASSINFOA
;
751 typedef struct _WSANSClassInfoW
{
757 } WSANSCLASSINFOW
, *PWSANSCLASSINFOW
, *LPWSANSCLASSINFOW
;
760 typedef WSANSCLASSINFOW WSANSCLASSINFO
;
761 typedef PWSANSCLASSINFOW PWSANSCLASSINFO
;
762 typedef LPWSANSCLASSINFOW LPWSANSCLASSINFO
;
764 typedef WSANSCLASSINFOA WSANSCLASSINFO
;
765 typedef PWSANSCLASSINFOA PWSANSCLASSINFO
;
766 typedef LPWSANSCLASSINFOA LPWSANSCLASSINFO
;
769 typedef struct _WSAServiceClassInfoA
{
770 LPGUID lpServiceClassId
;
771 LPSTR lpszServiceClassName
;
773 LPWSANSCLASSINFOA lpClassInfos
;
774 } WSASERVICECLASSINFOA
, *PWSASERVICECLASSINFOA
, *LPWSASERVICECLASSINFOA
;
776 typedef struct _WSAServiceClassInfoW
{
777 LPGUID lpServiceClassId
;
778 LPWSTR lpszServiceClassName
;
780 LPWSANSCLASSINFOW lpClassInfos
;
781 } WSASERVICECLASSINFOW
, *PWSASERVICECLASSINFOW
, *LPWSASERVICECLASSINFOW
;
784 typedef WSASERVICECLASSINFOW WSASERVICECLASSINFO
;
785 typedef PWSASERVICECLASSINFOW PWSASERVICECLASSINFO
;
786 typedef LPWSASERVICECLASSINFOW LPWSASERVICECLASSINFO
;
788 typedef WSASERVICECLASSINFOA WSASERVICECLASSINFO
;
789 typedef PWSASERVICECLASSINFOA PWSASERVICECLASSINFO
;
790 typedef LPWSASERVICECLASSINFOA LPWSASERVICECLASSINFO
;
794 /* WinSock 2 DLL prototypes */
801 OUT INT FAR
* addrlen
);
807 IN CONST LPSOCKADDR name
,
819 IN CONST LPSOCKADDR name
,
827 IN OUT INT FAR
* namelen
);
834 IN OUT INT FAR
* namelen
);
842 OUT CHAR FAR
* optval
,
843 IN OUT INT FAR
* optlen
);
853 IN USHORT hostshort
);
860 IN OUT ULONG FAR
* argp
);
894 IN OUT INT FAR
* fromlen
);
900 IN OUT LPFD_SET readfds
,
901 IN OUT LPFD_SET writefds
,
902 IN OUT LPFD_SET exceptfds
,
903 IN CONST LPTIMEVAL timeout
);
909 IN CONST CHAR FAR
* buf
,
917 IN CONST CHAR FAR
* buf
,
920 IN CONST LPSOCKADDR to
,
929 IN CONST CHAR FAR
* optval
,
950 IN OUT LPINT addrlen
,
951 IN LPCONDITIONPROC lpfnCondition
,
952 IN DWORD dwCallbackData
);
964 WSACancelBlockingCall(VOID
);
979 IN CONST LPSOCKADDR name
,
981 IN LPWSABUF lpCallerData
,
982 OUT LPWSABUF lpCalleeData
,
988 WSACreateEvent(VOID
);
994 IN DWORD dwProcessId
,
995 OUT LPWSAPROTOCOL_INFOA lpProtocolInfo
);
1001 IN DWORD dwProcessId
,
1002 OUT LPWSAPROTOCOL_INFOW lpProtocolInfo
);
1005 #define WSADuplicateSocket WSADuplicateSocketA
1007 #define WSADuplicateSocket WSADuplicateSocketW
1008 #endif /* UNICODE */
1012 WSAEnumNetworkEvents(
1014 IN WSAEVENT hEventObject
,
1015 OUT LPWSANETWORKEVENTS lpNetworkEvents
);
1020 IN LPINT lpiProtocols
,
1021 OUT LPWSAPROTOCOL_INFOA lpProtocolBuffer
,
1022 IN OUT LPDWORD lpdwBufferLength
);
1027 IN LPINT lpiProtocols
,
1028 OUT LPWSAPROTOCOL_INFOW lpProtocolBuffer
,
1029 IN OUT LPDWORD lpdwBufferLength
);
1032 #define WSAEnumProtocols WSAEnumProtocolsA
1034 #define WSAEnumProtocols WSAEnumProtocolsW
1035 #endif /* UNICODE */
1041 IN WSAEVENT hEventObject
,
1042 IN LONG lNetworkEvents
);
1046 WSAGetLastError(VOID
);
1050 WSAGetOverlappedResult(
1052 IN LPWSAOVERLAPPED lpOverlapped
,
1053 OUT LPDWORD lpcbTransfer
,
1055 OUT LPDWORD lpdwFlags
);
1061 IN OUT LPWSABUF lpQOSName
,
1069 OUT ULONG FAR
* lpnetlong
);
1075 IN USHORT hostshort
,
1076 OUT USHORT FAR
* lpnetshort
);
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
);
1093 WSAIsBlocking(VOID
);
1099 IN CONST LPSOCKADDR name
,
1101 IN LPWSABUF lpCallerData
,
1102 OUT LPWSABUF lpCalleeData
,
1112 OUT ULONG FAR
* lphostlong
);
1119 OUT USHORT FAR
* lphostshort
);
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
);
1136 OUT LPWSABUF lpInboundDisconnectData
);
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
);
1154 IN WSAEVENT hEvent
);
1160 IN LPWSABUF lpBuffers
,
1161 IN DWORD dwBufferCount
,
1162 OUT LPDWORD lpNumberOfBytesSent
,
1164 IN LPWSAOVERLAPPED lpOverlapped
,
1165 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
1171 IN LPWSABUF lpOutboundDisconnectData
);
1177 IN LPWSABUF lpBuffers
,
1178 IN DWORD dwBufferCount
,
1179 OUT LPDWORD lpNumberOfBytesSent
,
1181 IN CONST LPSOCKADDR lpTo
,
1183 IN LPWSAOVERLAPPED lpOverlapped
,
1184 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
1189 IN FARPROC lpBlockFunc
);
1194 IN WSAEVENT hEvent
);
1207 IN LPWSAPROTOCOL_INFOA lpProtocolInfo
,
1217 IN LPWSAPROTOCOL_INFOW lpProtocolInfo
,
1222 #define WSASocket WSASocketW
1224 #define WSASocket WSASocketA
1225 #endif /* UNICODE */
1230 IN WORD wVersionRequested
,
1231 OUT LPWSADATA lpWSAData
);
1235 WSAUnhookBlockingHook(VOID
);
1239 WSAWaitForMultipleEvents(
1241 IN CONST WSAEVENT FAR
* lphEvents
,
1244 IN BOOL fAlertable
);
1248 WSAProviderConfigChange(
1249 IN OUT LPHANDLE lpNotificationHandle
,
1250 IN LPWSAOVERLAPPED lpOverlapped
,
1251 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
1253 /* Name resolution APIs */
1257 WSAAddressToStringA(
1258 IN LPSOCKADDR lpsaAddress
,
1259 IN DWORD dwAddressLength
,
1260 IN LPWSAPROTOCOL_INFOA lpProtocolInfo
,
1261 OUT LPSTR lpszAddressString
,
1262 IN OUT LPDWORD lpdwAddressStringLength
);
1266 WSAAddressToStringW(
1267 IN LPSOCKADDR lpsaAddress
,
1268 IN DWORD dwAddressLength
,
1269 IN LPWSAPROTOCOL_INFOW lpProtocolInfo
,
1270 OUT LPWSTR lpszAddressString
,
1271 IN OUT LPDWORD lpdwAddressStringLength
);
1274 #define WSAAddressToString WSAAddressToStringW
1276 #define WSAAddressToString WSAAddressToStringA
1277 #endif /* UNICODE */
1281 WSAEnumNameSpaceProvidersA(
1282 IN OUT LPDWORD lpdwBufferLength
,
1283 OUT LPWSANAMESPACE_INFOA lpnspBuffer
);
1287 WSAEnumNameSpaceProvidersW(
1288 IN OUT LPDWORD lpdwBufferLength
,
1289 OUT LPWSANAMESPACE_INFOW lpnspBuffer
);
1292 #define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersW
1294 #define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersA
1295 #endif /* UNICODE */
1299 WSAGetServiceClassInfoA(
1300 IN LPGUID lpProviderId
,
1301 IN LPGUID lpServiceClassId
,
1302 IN OUT LPDWORD lpdwBufferLength
,
1303 OUT LPWSASERVICECLASSINFOA lpServiceClassInfo
);
1307 WSAGetServiceClassInfoW(
1308 IN LPGUID lpProviderId
,
1309 IN LPGUID lpServiceClassId
,
1310 IN OUT LPDWORD lpdwBufferLength
,
1311 OUT LPWSASERVICECLASSINFOW lpServiceClassInfo
);
1314 #define WSAGetServiceClassInfo WSAGetServiceClassInfoW
1316 #define WSAGetServiceClassInfo WSAGetServiceClassInfoA
1317 #endif /* UNICODE */
1321 WSAGetServiceClassNameByClassIdA(
1322 IN LPGUID lpServiceClassId
,
1323 OUT LPSTR lpszServiceClassName
,
1324 IN OUT LPDWORD lpdwBufferLength
);
1328 WSAGetServiceClassNameByClassIdW(
1329 IN LPGUID lpServiceClassId
,
1330 OUT LPWSTR lpszServiceClassName
,
1331 IN OUT LPDWORD lpdwBufferLength
);
1334 #define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdW
1336 #define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdA
1337 #endif /* UNICODE */
1341 WSAInstallServiceClassA(
1342 IN LPWSASERVICECLASSINFOA lpServiceClassInfo
);
1346 WSAInstallServiceClassW(
1347 IN LPWSASERVICECLASSINFOW lpServiceClassInfo
);
1350 #define WSAInstallServiceClass WSAInstallServiceClassW
1352 #define WSAInstallServiceClass WSAInstallServiceClassA
1353 #endif /* UNICODE */
1357 WSALookupServiceBegin(
1358 IN LPWSAQUERYSET lpqsRestrictions
,
1359 IN DWORD dwControlFlags
,
1360 OUT LPHANDLE lphLookup
);
1364 WSALookupServiceEnd(
1369 WSALookupServiceNext(
1371 IN DWORD dwControlFlags
,
1372 IN OUT LPDWORD lpdwBufferLength
,
1373 OUT LPWSAQUERYSET lpqsResults
);
1377 WSARemoveServiceClass(
1378 IN LPGUID lpServiceClassId
);
1383 IN LPWSAQUERYSET lpqsRegInfo
,
1384 IN WSAESETSERVICEOP essOperation
,
1385 IN DWORD dwControlFlags
);
1389 WSAStringToAddressA(
1390 IN LPSTR AddressString
,
1391 IN INT AddressFamily
,
1392 IN LPWSAPROTOCOL_INFOA lpProtocolInfo
,
1393 OUT LPSOCKADDR lpAddress
,
1394 IN OUT LPINT lpAddressLength
);
1398 WSAStringToAddressW(
1399 IN LPWSTR AddressString
,
1400 IN INT AddressFamily
,
1401 IN LPWSAPROTOCOL_INFOW lpProtocolInfo
,
1402 OUT LPSOCKADDR lpAddress
,
1403 IN OUT LPINT lpAddressLength
);
1406 #define WSAStringToAddress WSAStringToAddressW
1408 #define WSAStringToAddress WSAStringToAddressA
1409 #endif /* UNICODE */
1411 /* WinSock 1.1 compatible name resolution APIs */
1416 IN CONST CHAR FAR
* addr
,
1423 IN CONST CHAR FAR
* name
);
1434 IN CONST CHAR FAR
* name
);
1444 IN CONST CHAR FAR
* name
,
1445 IN CONST CHAR FAR
* proto
);
1451 IN CONST CHAR FAR
* proto
);
1456 IN CONST CHAR FAR
* cp
);
1465 WSAAsyncGetHostByAddr(
1468 IN CONST CHAR FAR
* addr
,
1476 WSAAsyncGetHostByName(
1479 IN CONST CHAR FAR
* name
,
1485 WSAAsyncGetProtoByName(
1488 IN CONST CHAR FAR
* name
,
1494 WSAAsyncGetProtoByNumber(
1503 WSAAsyncGetServByName(
1506 IN CONST CHAR FAR
* name
,
1507 IN CONST CHAR FAR
* proto
,
1513 WSAAsyncGetServByPort(
1517 IN CONST CHAR FAR
* proto
,
1523 WSACancelAsyncRequest(
1524 IN HANDLE hAsyncTaskHandle
);
1528 #endif /* __cplusplus */
1530 #endif /* __WINSOCK2_H */