ws2tcpip.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. /**
  2. * This file has no copyright assigned and is placed in the Public Domain.
  3. * This file is part of the mingw-w64 runtime package.
  4. * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5. */
  6. #ifndef _WS2TCPIP_H_
  7. #define _WS2TCPIP_H_
  8. #include <_mingw_unicode.h>
  9. #ifdef __LP64__
  10. #pragma push_macro("u_long")
  11. #undef u_long
  12. #define u_long __ms_u_long
  13. #endif
  14. #include <winsock2.h>
  15. #include <ws2ipdef.h>
  16. #include <psdk_inc/_ip_mreq1.h>
  17. #include <winapifamily.h>
  18. #define SIO_GET_INTERFACE_LIST _IOR('t',127,u_long)
  19. #define SIO_GET_INTERFACE_LIST_EX _IOR('t',126,u_long)
  20. #define SIO_SET_MULTICAST_FILTER _IOW('t',125,u_long)
  21. #define SIO_GET_MULTICAST_FILTER _IOW('t',124 | IOC_IN,u_long)
  22. #define UDP_NOCHECKSUM 1
  23. #define UDP_CHECKSUM_COVERAGE 20
  24. #define TCP_EXPEDITED_1122 0x0002
  25. #include <ws2ipdef.h>
  26. #define SS_PORT(ssp) (((struct sockaddr_in*)(ssp))->sin_port)
  27. #define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }
  28. #define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } }
  29. #ifdef __cplusplus
  30. extern "C" {
  31. #endif
  32. extern const struct in6_addr in6addr_any;
  33. extern const struct in6_addr in6addr_loopback;
  34. int IN6_IS_ADDR_UNSPECIFIED(const struct in6_addr *);
  35. int IN6_IS_ADDR_LOOPBACK(const struct in6_addr *);
  36. int IN6_IS_ADDR_MULTICAST(const struct in6_addr *);
  37. int IN6_IS_ADDR_LINKLOCAL(const struct in6_addr *);
  38. int IN6_IS_ADDR_SITELOCAL(const struct in6_addr *);
  39. int IN6_IS_ADDR_V4MAPPED(const struct in6_addr *);
  40. int IN6_IS_ADDR_V4COMPAT(const struct in6_addr *);
  41. int IN6_IS_ADDR_MC_NODELOCAL(const struct in6_addr *);
  42. int IN6_IS_ADDR_MC_LINKLOCAL(const struct in6_addr *);
  43. int IN6_IS_ADDR_MC_SITELOCAL(const struct in6_addr *);
  44. int IN6_IS_ADDR_MC_ORGLOCAL(const struct in6_addr *);
  45. int IN6_IS_ADDR_MC_GLOBAL(const struct in6_addr *);
  46. int IN6ADDR_ISANY(const struct sockaddr_in6 *);
  47. int IN6ADDR_ISLOOPBACK(const struct sockaddr_in6 *);
  48. void IN6_SET_ADDR_UNSPECIFIED(struct in6_addr *);
  49. void IN6_SET_ADDR_LOOPBACK(struct in6_addr *);
  50. void IN6ADDR_SETANY(struct sockaddr_in6 *);
  51. void IN6ADDR_SETLOOPBACK(struct sockaddr_in6 *);
  52. WS2TCPIP_INLINE int IN6_IS_ADDR_UNSPECIFIED(const struct in6_addr *a) { return ((a->s6_words[0]==0) && (a->s6_words[1]==0) && (a->s6_words[2]==0) && (a->s6_words[3]==0) && (a->s6_words[4]==0) && (a->s6_words[5]==0) && (a->s6_words[6]==0) && (a->s6_words[7]==0)); }
  53. WS2TCPIP_INLINE int IN6_IS_ADDR_LOOPBACK(const struct in6_addr *a) { return ((a->s6_words[0]==0) && (a->s6_words[1]==0) && (a->s6_words[2]==0) && (a->s6_words[3]==0) && (a->s6_words[4]==0) && (a->s6_words[5]==0) && (a->s6_words[6]==0) && (a->s6_words[7]==0x0100)); }
  54. WS2TCPIP_INLINE int IN6_IS_ADDR_MULTICAST(const struct in6_addr *a) { return (a->s6_bytes[0]==0xff); }
  55. WS2TCPIP_INLINE int IN6_IS_ADDR_LINKLOCAL(const struct in6_addr *a) { return ((a->s6_bytes[0]==0xfe) && ((a->s6_bytes[1] & 0xc0)==0x80)); }
  56. WS2TCPIP_INLINE int IN6_IS_ADDR_SITELOCAL(const struct in6_addr *a) { return ((a->s6_bytes[0]==0xfe) && ((a->s6_bytes[1] & 0xc0)==0xc0)); }
  57. WS2TCPIP_INLINE int IN6_IS_ADDR_V4MAPPED(const struct in6_addr *a) { return ((a->s6_words[0]==0) && (a->s6_words[1]==0) && (a->s6_words[2]==0) && (a->s6_words[3]==0) && (a->s6_words[4]==0) && (a->s6_words[5]==0xffff)); }
  58. WS2TCPIP_INLINE int IN6_IS_ADDR_V4COMPAT(const struct in6_addr *a) { return ((a->s6_words[0]==0) && (a->s6_words[1]==0) && (a->s6_words[2]==0) && (a->s6_words[3]==0) && (a->s6_words[4]==0) && (a->s6_words[5]==0) && !((a->s6_words[6]==0) && (a->s6_addr[14]==0) && ((a->s6_addr[15]==0) || (a->s6_addr[15]==1)))); }
  59. WS2TCPIP_INLINE int IN6_IS_ADDR_MC_NODELOCAL(const struct in6_addr *a) { return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_bytes[1] & 0xf)==1); }
  60. WS2TCPIP_INLINE int IN6_IS_ADDR_MC_LINKLOCAL(const struct in6_addr *a) { return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_bytes[1] & 0xf)==2); }
  61. WS2TCPIP_INLINE int IN6_IS_ADDR_MC_SITELOCAL(const struct in6_addr *a) { return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_bytes[1] & 0xf)==5); }
  62. WS2TCPIP_INLINE int IN6_IS_ADDR_MC_ORGLOCAL(const struct in6_addr *a) { return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_bytes[1] & 0xf)==8); }
  63. WS2TCPIP_INLINE int IN6_IS_ADDR_MC_GLOBAL(const struct in6_addr *a) { return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_bytes[1] & 0xf)==0xe); }
  64. WS2TCPIP_INLINE int IN6ADDR_ISANY(const struct sockaddr_in6 *a) { return ((a->sin6_family==AF_INET6) && IN6_IS_ADDR_UNSPECIFIED(&a->sin6_addr)); }
  65. WS2TCPIP_INLINE int IN6ADDR_ISLOOPBACK(const struct sockaddr_in6 *a) { return ((a->sin6_family==AF_INET6) && IN6_IS_ADDR_LOOPBACK(&a->sin6_addr)); }
  66. WS2TCPIP_INLINE void IN6_SET_ADDR_UNSPECIFIED(struct in6_addr *a) { memset(a->s6_bytes,0,sizeof(struct in6_addr)); }
  67. WS2TCPIP_INLINE void IN6_SET_ADDR_LOOPBACK(struct in6_addr *a) {
  68. memset(a->s6_bytes,0,sizeof(struct in6_addr));
  69. a->s6_bytes[15] = 1;
  70. }
  71. WS2TCPIP_INLINE void IN6ADDR_SETANY(struct sockaddr_in6 *a) {
  72. a->sin6_family = AF_INET6;
  73. a->sin6_port = 0;
  74. a->sin6_flowinfo = 0;
  75. IN6_SET_ADDR_UNSPECIFIED(&a->sin6_addr);
  76. a->sin6_scope_id = 0;
  77. }
  78. WS2TCPIP_INLINE void IN6ADDR_SETLOOPBACK(struct sockaddr_in6 *a) {
  79. a->sin6_family = AF_INET6;
  80. a->sin6_port = 0;
  81. a->sin6_flowinfo = 0;
  82. IN6_SET_ADDR_LOOPBACK(&a->sin6_addr);
  83. a->sin6_scope_id = 0;
  84. }
  85. /* Those declarations are mandatory for Open Group Base spec */
  86. #define IN6_IS_ADDR_UNSPECIFIED IN6_IS_ADDR_UNSPECIFIED
  87. #define IN6_IS_ADDR_LOOPBACK IN6_IS_ADDR_LOOPBACK
  88. #define IN6_IS_ADDR_MULTICAST IN6_IS_ADDR_MULTICAST
  89. #define IN6_IS_ADDR_LINKLOCAL IN6_IS_ADDR_LINKLOCAL
  90. #define IN6_IS_ADDR_SITELOCAL IN6_IS_ADDR_SITELOCAL
  91. #define IN6_IS_ADDR_V4MAPPED IN6_IS_ADDR_V4MAPPED
  92. #define IN6_IS_ADDR_V4COMPAT IN6_IS_ADDR_V4COMPAT
  93. #define IN6_IS_ADDR_MC_NODELOCAL IN6_IS_ADDR_MC_NODELOCAL
  94. #define IN6_IS_ADDR_MC_LINKLOCAL IN6_IS_ADDR_MC_LINKLOCAL
  95. #define IN6_IS_ADDR_MC_SITELOCAL IN6_IS_ADDR_MC_SITELOCAL
  96. #define IN6_IS_ADDR_MC_ORGLOCAL IN6_IS_ADDR_MC_ORGLOCAL
  97. #define IN6_IS_ADDR_MC_GLOBAL IN6_IS_ADDR_MC_GLOBAL
  98. #ifdef __cplusplus
  99. }
  100. #endif
  101. typedef struct in_pktinfo {
  102. IN_ADDR ipi_addr;
  103. UINT ipi_ifindex;
  104. } IN_PKTINFO;
  105. C_ASSERT(sizeof(IN_PKTINFO)==8);
  106. typedef struct in6_pktinfo {
  107. IN6_ADDR ipi6_addr;
  108. UINT ipi6_ifindex;
  109. } IN6_PKTINFO;
  110. C_ASSERT(sizeof(IN6_PKTINFO)==20);
  111. #define EAI_AGAIN WSATRY_AGAIN
  112. #define EAI_BADFLAGS WSAEINVAL
  113. #define EAI_FAIL WSANO_RECOVERY
  114. #define EAI_FAMILY WSAEAFNOSUPPORT
  115. #define EAI_MEMORY WSA_NOT_ENOUGH_MEMORY
  116. #define EAI_NONAME WSAHOST_NOT_FOUND
  117. #define EAI_SERVICE WSATYPE_NOT_FOUND
  118. #define EAI_SOCKTYPE WSAESOCKTNOSUPPORT
  119. #define EAI_NODATA 11004 /* WSANO_DATA */
  120. typedef struct addrinfo {
  121. int ai_flags;
  122. int ai_family;
  123. int ai_socktype;
  124. int ai_protocol;
  125. size_t ai_addrlen;
  126. char *ai_canonname;
  127. struct sockaddr *ai_addr;
  128. struct addrinfo *ai_next;
  129. } ADDRINFOA,*PADDRINFOA;
  130. typedef struct addrinfoW {
  131. int ai_flags;
  132. int ai_family;
  133. int ai_socktype;
  134. int ai_protocol;
  135. size_t ai_addrlen;
  136. PWSTR ai_canonname;
  137. struct sockaddr *ai_addr;
  138. struct addrinfoW *ai_next;
  139. } ADDRINFOW,*PADDRINFOW;
  140. typedef __MINGW_NAME_AW(ADDRINFO) ADDRINFOT,*PADDRINFOT;
  141. typedef ADDRINFOA ADDRINFO,*LPADDRINFO;
  142. #define AI_PASSIVE 0x00000001
  143. #define AI_CANONNAME 0x00000002
  144. #define AI_NUMERICHOST 0x00000004
  145. #if (_WIN32_WINNT >= 0x0600)
  146. #define AI_NUMERICSERV 0x00000008
  147. #define AI_ALL 0x00000100
  148. #define AI_ADDRCONFIG 0x00000400
  149. #define AI_V4MAPPED 0x00000800
  150. #define AI_NON_AUTHORITATIVE 0x00004000
  151. #define AI_SECURE 0x00008000
  152. #define AI_RETURN_PREFERRED_NAMES 0x00010000
  153. #endif
  154. #if (_WIN32_WINNT >= 0x0601)
  155. #define AI_FQDN 0x00020000
  156. #define AI_FILESERVER 0x00040000
  157. #endif
  158. #if (_WIN32_WINNT >= 0x0602)
  159. #define AI_DISABLE_IDN_ENCODING 0x00080000
  160. #endif
  161. #ifdef __cplusplus
  162. extern "C" {
  163. #endif
  164. #define GetAddrInfo __MINGW_NAME_AW(GetAddrInfo)
  165. WINSOCK_API_LINKAGE int WSAAPI getaddrinfo(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res);
  166. WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoW(PCWSTR pNodeName,PCWSTR pServiceName,const ADDRINFOW *pHints,PADDRINFOW *ppResult);
  167. #define GetAddrInfoA getaddrinfo
  168. #if INCL_WINSOCK_API_TYPEDEFS
  169. typedef int (WSAAPI *LPFN_GETADDRINFO)(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res);
  170. typedef int (WSAAPI *LPFN_GETADDRINFOW)(PCWSTR pNodeName,PCWSTR pServiceName,const ADDRINFOW *pHints,PADDRINFOW *ppResult);
  171. #define LPFN_GETADDRINFOA LPFN_GETADDRINFO
  172. #define LPFN_GETADDRINFOT __MINGW_NAME_AW(LPFN_GETADDRINFO)
  173. #endif
  174. #define FreeAddrInfo __MINGW_NAME_AW(FreeAddrInfo)
  175. WINSOCK_API_LINKAGE void WSAAPI freeaddrinfo(LPADDRINFO pAddrInfo);
  176. WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoW(PADDRINFOW pAddrInfo);
  177. #define FreeAddrInfoA freeaddrinfo
  178. #if INCL_WINSOCK_API_TYPEDEFS
  179. typedef void (WSAAPI *LPFN_FREEADDRINFO)(struct addrinfo *ai);
  180. typedef void (WSAAPI *LPFN_FREEADDRINFOW)(PADDRINFOW pAddrInfo);
  181. #define LPFN_FREEADDRINFOA LPFN_FREEADDRINFO
  182. #define LPFN_FREEADDRINFOT __MINGW_NAME_AW(LPFN_FREEADDRINFO)
  183. #endif
  184. typedef int socklen_t;
  185. #define GetNameInfo __MINGW_NAME_AW(GetNameInfo)
  186. WINSOCK_API_LINKAGE int WSAAPI getnameinfo(const struct sockaddr *sa,socklen_t salen,char *host,DWORD hostlen,char *serv,DWORD servlen,int flags);
  187. WINSOCK_API_LINKAGE INT WSAAPI GetNameInfoW(const SOCKADDR *pSockaddr,socklen_t SockaddrLength,PWCHAR pNodeBuffer,DWORD NodeBufferSize,PWCHAR pServiceBuffer,DWORD ServiceBufferSize,INT Flags);
  188. #define GetNameInfoA getnameinfo
  189. #if INCL_WINSOCK_API_TYPEDEFS
  190. typedef int (WSAAPI *LPFN_GETNAMEINFO)(const struct sockaddr *sa,socklen_t salen,char *host,DWORD hostlen,char *serv,DWORD servlen,int flags);
  191. typedef INT (WSAAPI *LPFN_GETNAMEINFOW)(const SOCKADDR *pSockaddr,socklen_t SockaddrLength,PWCHAR pNodeBuffer,DWORD NodeBufferSize,PWCHAR pServiceBuffer,DWORD ServiceBufferSize,INT Flags);
  192. #define LPFN_GETNAMEINFOA LPFN_GETNAMEINFO
  193. #define LPFN_GETNAMEINFOT __MINGW_NAME_AW(LPFN_GETNAMEINFO)
  194. #endif
  195. #define gai_strerror __MINGW_NAME_AW(gai_strerror)
  196. #define GAI_STRERROR_BUFFER_SIZE 1024
  197. char *gai_strerrorA (int);
  198. WCHAR *gai_strerrorW(int);
  199. #define NI_MAXHOST 1025
  200. #define NI_MAXSERV 32
  201. #define INET_ADDRSTRLEN 22
  202. #define INET6_ADDRSTRLEN 65
  203. #define NI_NOFQDN 0x01
  204. #define NI_NUMERICHOST 0x02
  205. #define NI_NAMEREQD 0x04
  206. #define NI_NUMERICSERV 0x08
  207. #define NI_DGRAM 0x10
  208. #include <mstcpip.h>
  209. #if (_WIN32_WINNT >= 0x0600)
  210. #define PADDRINFOEX __MINGW_NAME_AW(PADDRINFOEX)
  211. #define GetAddrInfoEx __MINGW_NAME_AW(GetAddrInfoEx)
  212. #define SetAddrInfoEx __MINGW_NAME_AW(SetAddrInfoEx)
  213. typedef struct addrinfoexA {
  214. int ai_flags;
  215. int ai_family;
  216. int ai_socktype;
  217. int ai_protocol;
  218. size_t ai_addrlen;
  219. LPCSTR ai_canonname;
  220. struct sockaddr *ai_addr;
  221. void *ai_blob;
  222. size_t ai_bloblen;
  223. LPGUID ai_provider;
  224. struct addrinfoexA *ai_next;
  225. } ADDRINFOEXA, *PADDRINFOEXA;
  226. typedef struct addrinfoexW {
  227. int ai_flags;
  228. int ai_family;
  229. int ai_socktype;
  230. int ai_protocol;
  231. size_t ai_addrlen;
  232. LPCWSTR ai_canonname;
  233. struct sockaddr *ai_addr;
  234. void *ai_blob;
  235. size_t ai_bloblen;
  236. LPGUID ai_provider;
  237. struct addrinfoexW *ai_next;
  238. } ADDRINFOEXW, *PADDRINFOEXW;
  239. typedef PVOID LPLOOKUPSERVICE_COMPLETION_ROUTINE; /*reserved*/
  240. WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoExA(PCSTR pName, PCSTR pServiceName, DWORD dwNameSpace,
  241. LPGUID lpNspId,const ADDRINFOEXA *pHints,PADDRINFOEXA *ppResult,
  242. PTIMEVAL timeout,LPOVERLAPPED lpOverlapped,
  243. LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
  244. LPHANDLE lpNameHandle);
  245. WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoExW(PCWSTR pName,PCWSTR pServiceName,DWORD dwNameSpace,
  246. LPGUID lpNspId,const ADDRINFOEXW *pHints,PADDRINFOEXW *ppResult,
  247. PTIMEVAL timeout,LPOVERLAPPED lpOverlapped,
  248. LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
  249. LPHANDLE lpNameHandle);
  250. WINSOCK_API_LINKAGE int WSAAPI SetAddrInfoExA(PCSTR pName, PCSTR pServiceName, SOCKET_ADDRESS *pAddresses,
  251. DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace,
  252. LPGUID lpNspId,PTIMEVAL timeout,LPOVERLAPPED lpOverlapped,
  253. LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
  254. LPHANDLE lpNameHandle);
  255. WINSOCK_API_LINKAGE int WSAAPI SetAddrInfoExW(PCWSTR pName,PCWSTR pServiceName,SOCKET_ADDRESS *pAddresses,
  256. DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace,
  257. LPGUID lpNspId,PTIMEVAL timeout,LPOVERLAPPED lpOverlapped,
  258. LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
  259. LPHANDLE lpNameHandle);
  260. WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoEx(PADDRINFOEXA pAddrInfo);
  261. WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoExW(PADDRINFOEXW pAddrInfo);
  262. #define FreeAddrInfoExA FreeAddrInfoEx
  263. #ifdef UNICODE
  264. # define FreeAddrInfoEx FreeAddrInfoExW
  265. #endif /* UNICODE */
  266. #if INCL_WINSOCK_API_TYPEDEFS
  267. #define LPFN_GETADDRINFOEX __MINGW_NAME_AW(LPFN_GETADDRINFOEX)
  268. typedef int (WSAAPI *LPFN_GETADDRINFOEXA)(PCSTR pName, PCSTR pServiceName, DWORD dwNameSpace,
  269. LPGUID lpNspId,const ADDRINFOEXA *pHints,PADDRINFOEXA *ppResult,
  270. PTIMEVAL timeout,LPOVERLAPPED lpOverlapped,
  271. LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
  272. LPHANDLE lpNameHandle);
  273. typedef int (WSAAPI *LPFN_GETADDRINFOEXW)(PCWSTR pName,PCWSTR pServiceName,DWORD dwNameSpace,
  274. LPGUID lpNspId,const ADDRINFOEXW *pHints,PADDRINFOEXW *ppResult,
  275. PTIMEVAL timeout,LPOVERLAPPED lpOverlapped,
  276. LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
  277. LPHANDLE lpNameHandle);
  278. #define LPFN_SETADDRINFOEX __MINGW_NAME_AW(LPFN_SETADDRINFOEX)
  279. typedef int (WSAAPI *LPFN_SETADDRINFOEXA)(PCSTR pName, PCSTR pServiceName, SOCKET_ADDRESS *pAddresses,
  280. DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace,
  281. LPGUID lpNspId,PTIMEVAL timeout,LPOVERLAPPED lpOverlapped,
  282. LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
  283. LPHANDLE lpNameHandle);
  284. typedef int (WSAAPI *LPFN_SETADDRINFOEXW)(PCWSTR pName,PCWSTR pServiceName,SOCKET_ADDRESS *pAddresses,
  285. DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace,
  286. LPGUID lpNspId,PTIMEVAL timeout,LPOVERLAPPED lpOverlapped,
  287. LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
  288. LPHANDLE lpNameHandle);
  289. #define LPFN_FREEADDRINFOEX __MINGW_NAME_AW(LPFN_FREEADDRINFOEX)
  290. typedef void (WSAAPI *LPFN_FREEADDRINFOEXA)(PADDRINFOEXA pAddrInfo);
  291. typedef void (WSAAPI *LPFN_FREEADDRINFOEXW)(PADDRINFOEXW pAddrInfo);
  292. #endif /* INCL_WINSOCK_API_TYPEDEFS */
  293. WINSOCK_API_LINKAGE int WSAAPI WSAImpersonateSocketPeer(
  294. SOCKET Socket,
  295. const struct sockaddr *PeerAddress,
  296. ULONG peerAddressLen
  297. );
  298. WINSOCK_API_LINKAGE int WSAAPI WSAQuerySocketSecurity(
  299. SOCKET Socket,
  300. const SOCKET_SECURITY_QUERY_TEMPLATE *SecurityQueryTemplate,
  301. ULONG SecurityQueryTemplateLen,
  302. SOCKET_SECURITY_QUERY_INFO *SecurityQueryInfo,
  303. ULONG *SecurityQueryInfoLen,
  304. LPWSAOVERLAPPED Overlapped,
  305. LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine
  306. );
  307. WINSOCK_API_LINKAGE int WSAAPI WSARevertImpersonation(void);
  308. WINSOCK_API_LINKAGE int WSAAPI WSASetSocketPeerTargetName(
  309. SOCKET Socket,
  310. const SOCKET_PEER_TARGET_NAME *PeerTargetName,
  311. ULONG PeerTargetNameLen,
  312. LPWSAOVERLAPPED Overlapped,
  313. LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine
  314. );
  315. WINSOCK_API_LINKAGE int WSAAPI WSASetSocketSecurity(
  316. SOCKET Socket,
  317. const SOCKET_SECURITY_SETTINGS *SecuritySettings,
  318. ULONG SecuritySettingsLen,
  319. LPWSAOVERLAPPED Overlapped,
  320. LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine
  321. );
  322. #define InetNtopA inet_ntop
  323. WINSOCK_API_LINKAGE LPCWSTR WSAAPI InetNtopW(INT Family, LPCVOID pAddr, LPWSTR pStringBuf, size_t StringBufSIze);
  324. WINSOCK_API_LINKAGE LPCSTR WSAAPI InetNtopA(INT Family, LPCVOID pAddr, LPSTR pStringBuf, size_t StringBufSize);
  325. #define InetNtop __MINGW_NAME_AW(InetNtop)
  326. #define InetPtonA inet_pton
  327. WINSOCK_API_LINKAGE INT WSAAPI InetPtonW(INT Family, LPCWSTR pStringBuf, PVOID pAddr);
  328. WINSOCK_API_LINKAGE INT WSAAPI InetPtonA(INT Family, LPCSTR pStringBuf, PVOID pAddr);
  329. #define InetPton __MINGW_NAME_AW(InetPton)
  330. #endif /*(_WIN32_WINNT >= 0x0600)*/
  331. #ifdef __cplusplus
  332. }
  333. #endif
  334. #ifdef __LP64__
  335. #pragma pop_macro("u_long")
  336. #endif
  337. #endif /* _WS2TCPIP_H_ */