History

Add missing ws2tcpip.h which lets tcc compile Microsoft Winsock Server sample on Windows platform.

coltrane committed 6 years ago

Commit e5d7e371 parent 9712aff1 file · +391 −0Browse files

Unified · Split

win32/include/winapi/ws2tcpip.h+391−0
@@ -0,0 +1,391 @@
1+/**
2+ * This file has no copyright assigned and is placed in the Public Domain.
3+ * This file is part of the w64 mingw-runtime package.
4+ * No warranty is given; refer to the file DISCLAIMER within this package.
5+ */
6+#ifndef _WS2TCPIP_H
7+#define _WS2TCPIP_H
8+
9+#if __GNUC__ >=3
10+#pragma GCC system_header
11+#endif
12+
13+#include <ws2ipdef.h>
14+
15+struct ip_msfilter {
16+ struct in_addr imsf_multiaddr;
17+ struct in_addr imsf_interface;
18+ u_long imsf_fmode;
19+ u_long imsf_numsrc;
20+ struct in_addr imsf_slist[1];
21+};
22+
23+#define IP_MSFILTER_SIZE(numsrc) (sizeof(struct ip_msfilter)-sizeof(struct in_addr) + (numsrc)*sizeof(struct in_addr))
24+
25+#define MCAST_INCLUDE 0
26+#define MCAST_EXCLUDE 1
27+
28+#define SIO_GET_INTERFACE_LIST _IOR('t',127,u_long)
29+
30+#define SIO_GET_INTERFACE_LIST_EX _IOR('t',126,u_long)
31+#define SIO_SET_MULTICAST_FILTER _IOW('t',125,u_long)
32+#define SIO_GET_MULTICAST_FILTER _IOW('t',124 | IOC_IN,u_long)
33+
34+#define IP_OPTIONS 1
35+#define IP_HDRINCL 2
36+#define IP_TOS 3
37+#define IP_TTL 4
38+#define IP_MULTICAST_IF 9
39+#define IP_MULTICAST_TTL 10
40+#define IP_MULTICAST_LOOP 11
41+#define IP_ADD_MEMBERSHIP 12
42+#define IP_DROP_MEMBERSHIP 13
43+#define IP_DONTFRAGMENT 14
44+#define IP_ADD_SOURCE_MEMBERSHIP 15
45+#define IP_DROP_SOURCE_MEMBERSHIP 16
46+#define IP_BLOCK_SOURCE 17
47+#define IP_UNBLOCK_SOURCE 18
48+#define IP_PKTINFO 19
49+#define IP_RECEIVE_BROADCAST 22
50+
51+#define IPV6_HDRINCL 2
52+#define IPV6_UNICAST_HOPS 4
53+#define IPV6_MULTICAST_IF 9
54+#define IPV6_MULTICAST_HOPS 10
55+#define IPV6_MULTICAST_LOOP 11
56+#define IPV6_ADD_MEMBERSHIP 12
57+#define IPV6_DROP_MEMBERSHIP 13
58+#define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP
59+#define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP
60+#define IPV6_PKTINFO 19
61+#define IPV6_HOPLIMIT 21
62+#define IPV6_PROTECTION_LEVEL 23
63+
64+#define PROTECTION_LEVEL_UNRESTRICTED 10
65+#define PROTECTION_LEVEL_DEFAULT 20
66+#define PROTECTION_LEVEL_RESTRICTED 30
67+
68+#define UDP_NOCHECKSUM 1
69+#define UDP_CHECKSUM_COVERAGE 20
70+
71+#define TCP_EXPEDITED_1122 0x0002
72+
73+#ifndef s6_addr
74+
75+struct in6_addr {
76+ __MINGW_EXTENSION union {
77+ u_char Byte[16];
78+ u_short Word[8];
79+ } u;
80+};
81+
82+#define in_addr6 in6_addr
83+
84+#define _S6_un u
85+#define _S6_u8 Byte
86+#define s6_addr _S6_un._S6_u8
87+
88+#define s6_bytes u.Byte
89+#define s6_words u.Word
90+#endif
91+
92+typedef struct ipv6_mreq {
93+ struct in6_addr ipv6mr_multiaddr;
94+ unsigned int ipv6mr_interface;
95+} IPV6_MREQ;
96+
97+struct sockaddr_in6_old {
98+ short sin6_family;
99+ u_short sin6_port;
100+ u_long sin6_flowinfo;
101+ struct in6_addr sin6_addr;
102+};
103+
104+struct sockaddr_in6 {
105+ short sin6_family;
106+ u_short sin6_port;
107+ u_long sin6_flowinfo;
108+ struct in6_addr sin6_addr;
109+ u_long sin6_scope_id;
110+};
111+
112+typedef struct in6_addr IN6_ADDR;
113+typedef struct in6_addr *PIN6_ADDR;
114+typedef struct in6_addr *LPIN6_ADDR;
115+
116+typedef struct sockaddr_in6 SOCKADDR_IN6;
117+typedef struct sockaddr_in6 *PSOCKADDR_IN6;
118+typedef struct sockaddr_in6 *LPSOCKADDR_IN6;
119+
120+#define SS_PORT(ssp) (((struct sockaddr_in*)(ssp))->sin_port)
121+
122+#define IN6ADDR_ANY_INIT { 0 }
123+#define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }
124+
125+#ifdef __cplusplus
126+extern "C" {
127+#endif
128+
129+ extern const struct in6_addr in6addr_any;
130+ extern const struct in6_addr in6addr_loopback;
131+
132+#ifdef __cplusplus
133+}
134+#endif
135+
136+#define WS2TCPIP_INLINE __CRT_INLINE
137+
138+int IN6_ADDR_EQUAL(const struct in6_addr *,const struct in6_addr *);
139+int IN6_IS_ADDR_UNSPECIFIED(const struct in6_addr *);
140+int IN6_IS_ADDR_LOOPBACK(const struct in6_addr *);
141+int IN6_IS_ADDR_MULTICAST(const struct in6_addr *);
142+int IN6_IS_ADDR_LINKLOCAL(const struct in6_addr *);
143+int IN6_IS_ADDR_SITELOCAL(const struct in6_addr *);
144+int IN6_IS_ADDR_V4MAPPED(const struct in6_addr *);
145+int IN6_IS_ADDR_V4COMPAT(const struct in6_addr *);
146+int IN6_IS_ADDR_MC_NODELOCAL(const struct in6_addr *);
147+int IN6_IS_ADDR_MC_LINKLOCAL(const struct in6_addr *);
148+int IN6_IS_ADDR_MC_SITELOCAL(const struct in6_addr *);
149+int IN6_IS_ADDR_MC_ORGLOCAL(const struct in6_addr *);
150+int IN6_IS_ADDR_MC_GLOBAL(const struct in6_addr *);
151+int IN6ADDR_ISANY(const struct sockaddr_in6 *);
152+int IN6ADDR_ISLOOPBACK(const struct sockaddr_in6 *);
153+void IN6_SET_ADDR_UNSPECIFIED(struct in6_addr *);
154+void IN6_SET_ADDR_LOOPBACK(struct in6_addr *);
155+void IN6ADDR_SETANY(struct sockaddr_in6 *);
156+void IN6ADDR_SETLOOPBACK(struct sockaddr_in6 *);
157+
158+#ifndef __CRT__NO_INLINE
159+WS2TCPIP_INLINE int IN6_ADDR_EQUAL(const struct in6_addr *a,const struct in6_addr *b) { return (memcmp(a,b,sizeof(struct in6_addr))==0); }
160+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)); }
161+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)); }
162+WS2TCPIP_INLINE int IN6_IS_ADDR_MULTICAST(const struct in6_addr *a) { return (a->s6_bytes[0]==0xff); }
163+WS2TCPIP_INLINE int IN6_IS_ADDR_LINKLOCAL(const struct in6_addr *a) { return ((a->s6_bytes[0]==0xfe) && ((a->s6_bytes[1] & 0xc0)==0x80)); }
164+WS2TCPIP_INLINE int IN6_IS_ADDR_SITELOCAL(const struct in6_addr *a) { return ((a->s6_bytes[0]==0xfe) && ((a->s6_bytes[1] & 0xc0)==0xc0)); }
165+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)); }
166+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)))); }
167+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); }
168+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); }
169+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); }
170+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); }
171+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); }
172+WS2TCPIP_INLINE int IN6ADDR_ISANY(const struct sockaddr_in6 *a) { return ((a->sin6_family==AF_INET6) && IN6_IS_ADDR_UNSPECIFIED(&a->sin6_addr)); }
173+WS2TCPIP_INLINE int IN6ADDR_ISLOOPBACK(const struct sockaddr_in6 *a) { return ((a->sin6_family==AF_INET6) && IN6_IS_ADDR_LOOPBACK(&a->sin6_addr)); }
174+WS2TCPIP_INLINE void IN6_SET_ADDR_UNSPECIFIED(struct in6_addr *a) { memset(a->s6_bytes,0,sizeof(struct in6_addr)); }
175+WS2TCPIP_INLINE void IN6_SET_ADDR_LOOPBACK(struct in6_addr *a) {
176+ memset(a->s6_bytes,0,sizeof(struct in6_addr));
177+ a->s6_bytes[15] = 1;
178+}
179+WS2TCPIP_INLINE void IN6ADDR_SETANY(struct sockaddr_in6 *a) {
180+ a->sin6_family = AF_INET6;
181+ a->sin6_port = 0;
182+ a->sin6_flowinfo = 0;
183+ IN6_SET_ADDR_UNSPECIFIED(&a->sin6_addr);
184+ a->sin6_scope_id = 0;
185+}
186+WS2TCPIP_INLINE void IN6ADDR_SETLOOPBACK(struct sockaddr_in6 *a) {
187+ a->sin6_family = AF_INET6;
188+ a->sin6_port = 0;
189+ a->sin6_flowinfo = 0;
190+ IN6_SET_ADDR_LOOPBACK(&a->sin6_addr);
191+ a->sin6_scope_id = 0;
192+}
193+#endif /* !__CRT__NO_INLINE */
194+
195+typedef union sockaddr_gen {
196+ struct sockaddr Address;
197+ struct sockaddr_in AddressIn;
198+ struct sockaddr_in6_old AddressIn6;
199+} sockaddr_gen;
200+
201+typedef struct _INTERFACE_INFO {
202+ u_long iiFlags;
203+ sockaddr_gen iiAddress;
204+ sockaddr_gen iiBroadcastAddress;
205+ sockaddr_gen iiNetmask;
206+} INTERFACE_INFO,*LPINTERFACE_INFO;
207+
208+typedef struct _INTERFACE_INFO_EX {
209+ u_long iiFlags;
210+ SOCKET_ADDRESS iiAddress;
211+ SOCKET_ADDRESS iiBroadcastAddress;
212+ SOCKET_ADDRESS iiNetmask;
213+} INTERFACE_INFO_EX,*LPINTERFACE_INFO_EX;
214+
215+#define IFF_UP 0x00000001
216+#define IFF_BROADCAST 0x00000002
217+#define IFF_LOOPBACK 0x00000004
218+#define IFF_POINTTOPOINT 0x00000008
219+#define IFF_MULTICAST 0x00000010
220+
221+typedef struct in_pktinfo {
222+ IN_ADDR ipi_addr;
223+ UINT ipi_ifindex;
224+} IN_PKTINFO;
225+
226+C_ASSERT(sizeof(IN_PKTINFO)==8);
227+
228+typedef struct in6_pktinfo {
229+ IN6_ADDR ipi6_addr;
230+ UINT ipi6_ifindex;
231+} IN6_PKTINFO;
232+
233+C_ASSERT(sizeof(IN6_PKTINFO)==20);
234+
235+#define EAI_AGAIN WSATRY_AGAIN
236+#define EAI_BADFLAGS WSAEINVAL
237+#define EAI_FAIL WSANO_RECOVERY
238+#define EAI_FAMILY WSAEAFNOSUPPORT
239+#define EAI_MEMORY WSA_NOT_ENOUGH_MEMORY
240+
241+#define EAI_NONAME WSAHOST_NOT_FOUND
242+#define EAI_SERVICE WSATYPE_NOT_FOUND
243+#define EAI_SOCKTYPE WSAESOCKTNOSUPPORT
244+
245+#define EAI_NODATA EAI_NONAME
246+
247+typedef struct addrinfo {
248+ int ai_flags;
249+ int ai_family;
250+ int ai_socktype;
251+ int ai_protocol;
252+ size_t ai_addrlen;
253+ char *ai_canonname;
254+ struct sockaddr *ai_addr;
255+ struct addrinfo *ai_next;
256+} ADDRINFOA,*PADDRINFOA;
257+
258+typedef struct addrinfoW {
259+ int ai_flags;
260+ int ai_family;
261+ int ai_socktype;
262+ int ai_protocol;
263+ size_t ai_addrlen;
264+ PWSTR ai_canonname;
265+ struct sockaddr *ai_addr;
266+ struct addrinfoW *ai_next;
267+} ADDRINFOW,*PADDRINFOW;
268+
269+#ifdef UNICODE
270+typedef ADDRINFOW ADDRINFOT,*PADDRINFOT;
271+#else
272+typedef ADDRINFOA ADDRINFOT,*PADDRINFOT;
273+#endif
274+
275+typedef ADDRINFOA ADDRINFO,*LPADDRINFO;
276+
277+#define AI_PASSIVE 0x1
278+#define AI_CANONNAME 0x2
279+#define AI_NUMERICHOST 0x4
280+
281+#ifdef __cplusplus
282+extern "C" {
283+#endif
284+
285+#ifdef UNICODE
286+#define GetAddrInfo GetAddrInfoW
287+#else
288+#define GetAddrInfo GetAddrInfoA
289+#endif
290+
291+ WINSOCK_API_LINKAGE int WSAAPI getaddrinfo(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res);
292+ WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoW(PCWSTR pNodeName,PCWSTR pServiceName,const ADDRINFOW *pHints,PADDRINFOW *ppResult);
293+
294+#define GetAddrInfoA getaddrinfo
295+
296+#if INCL_WINSOCK_API_TYPEDEFS
297+ typedef int (WSAAPI *LPFN_GETADDRINFO)(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res);
298+ typedef int (WSAAPI *LPFN_GETADDRINFOW)(PCWSTR pNodeName,PCWSTR pServiceName,const ADDRINFOW *pHints,PADDRINFOW *ppResult);
299+
300+#define LPFN_GETADDRINFOA LPFN_GETADDRINFO
301+
302+#ifdef UNICODE
303+#define LPFN_GETADDRINFOT LPFN_GETADDRINFOW
304+#else
305+#define LPFN_GETADDRINFOT LPFN_GETADDRINFOA
306+#endif
307+#endif
308+
309+#ifdef UNICODE
310+#define FreeAddrInfo FreeAddrInfoW
311+#else
312+#define FreeAddrInfo FreeAddrInfoA
313+#endif
314+
315+ WINSOCK_API_LINKAGE void WSAAPI freeaddrinfo(LPADDRINFO pAddrInfo);
316+ WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoW(PADDRINFOW pAddrInfo);
317+
318+#define FreeAddrInfoA freeaddrinfo
319+
320+#if INCL_WINSOCK_API_TYPEDEFS
321+ typedef void (WSAAPI *LPFN_FREEADDRINFO)(struct addrinfo *ai);
322+ typedef void (WSAAPI *LPFN_FREEADDRINFOW)(PADDRINFOW pAddrInfo);
323+
324+#define LPFN_FREEADDRINFOA LPFN_FREEADDRINFO
325+
326+#ifdef UNICODE
327+#define LPFN_FREEADDRINFOT LPFN_FREEADDRINFOW
328+#else
329+#define LPFN_FREEADDRINFOT LPFN_FREEADDRINFOA
330+#endif
331+#endif
332+
333+#pragma push_macro("socklen_t")
334+#undef socklen_t
335+
336+ typedef int socklen_t;
337+
338+#ifdef UNICODE
339+#define GetNameInfo GetNameInfoW
340+#else
341+#define GetNameInfo GetNameInfoA
342+#endif
343+
344+ WINSOCK_API_LINKAGE int WSAAPI getnameinfo(const struct sockaddr *sa,socklen_t salen,char *host,DWORD hostlen,char *serv,DWORD servlen,int flags);
345+ WINSOCK_API_LINKAGE INT WSAAPI GetNameInfoW(const SOCKADDR *pSockaddr,socklen_t SockaddrLength,PWCHAR pNodeBuffer,DWORD NodeBufferSize,PWCHAR pServiceBuffer,DWORD ServiceBufferSize,INT Flags);
346+
347+#define GetNameInfoA getnameinfo
348+
349+#if INCL_WINSOCK_API_TYPEDEFS
350+ typedef int (WSAAPI *LPFN_GETNAMEINFO)(const struct sockaddr *sa,socklen_t salen,char *host,DWORD hostlen,char *serv,DWORD servlen,int flags);
351+ typedef INT (WSAAPI *LPFN_GETNAMEINFOW)(const SOCKADDR *pSockaddr,socklen_t SockaddrLength,PWCHAR pNodeBuffer,DWORD NodeBufferSize,PWCHAR pServiceBuffer,DWORD ServiceBufferSize,INT Flags);
352+
353+#define LPFN_GETNAMEINFOA LPFN_GETNAMEINFO
354+
355+#ifdef UNICODE
356+#define LPFN_GETNAMEINFOT LPFN_GETNAMEINFOW
357+#else
358+#define LPFN_GETNAMEINFOT LPFN_GETNAMEINFOA
359+#endif
360+#endif
361+
362+#pragma pop_macro("socklen_t")
363+
364+#ifdef UNICODE
365+#define gai_strerror gai_strerrorW
366+#else
367+#define gai_strerror gai_strerrorA
368+#endif
369+
370+#define GAI_STRERROR_BUFFER_SIZE 1024
371+
372+char *gai_strerrorA (int);
373+WCHAR *gai_strerrorW(int);
374+
375+#define NI_MAXHOST 1025
376+#define NI_MAXSERV 32
377+
378+#define INET_ADDRSTRLEN 22
379+#define INET6_ADDRSTRLEN 65
380+
381+#define NI_NOFQDN 0x01
382+#define NI_NUMERICHOST 0x02
383+#define NI_NAMEREQD 0x04
384+#define NI_NUMERICSERV 0x08
385+#define NI_DGRAM 0x10
386+
387+#ifdef __cplusplus
388+}
389+#endif
390+
391+#endif

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t