Mercurial > projects > ddbg_continued
comparison win32/winsock2.d @ 1:4a9dcbd9e54f
-files of 0.13 beta
-fixes so that it now compiles with the current dmd version
author | marton@basel.hu |
---|---|
date | Tue, 05 Apr 2011 20:44:01 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:586e4a649642 | 1:4a9dcbd9e54f |
---|---|
1 /***********************************************************************\ | |
2 * winsock2.d * | |
3 * * | |
4 * Windows API header module * | |
5 * * | |
6 * Translated from MinGW Windows headers * | |
7 * by Daniel Keep * | |
8 \***********************************************************************/ | |
9 module win32.winsock2; | |
10 pragma(lib, "Ws2_32.lib"); | |
11 | |
12 /* | |
13 Definitions for winsock 2 | |
14 | |
15 Contributed by the WINE project. | |
16 | |
17 Portions Copyright (c) 1980, 1983, 1988, 1993 | |
18 The Regents of the University of California. All rights reserved. | |
19 | |
20 Portions Copyright (c) 1993 by Digital Equipment Corporation. | |
21 */ | |
22 | |
23 /* DRK: This module should not be included if -version=Win32_Winsock2 has | |
24 * not been set. If it has, assert. I think it's better this way than | |
25 * letting the user believe that it's worked. | |
26 * | |
27 * SG: It has now been changed so that winsock2 is the default, and | |
28 * -version=Win32_Winsock1 must be set to use winsock. | |
29 */ | |
30 version(Win32_Winsock1) { | |
31 pragma(msg, "Cannot use win32.winsock2 with Win32_Winsock1 defined."); | |
32 static assert(false); | |
33 } | |
34 | |
35 import win32.winbase; | |
36 import win32.windef; | |
37 import win32.basetyps; | |
38 | |
39 alias char u_char; | |
40 alias ushort u_short; | |
41 alias uint u_int, u_long, SOCKET; | |
42 | |
43 const size_t FD_SETSIZE = 64; | |
44 | |
45 /* shutdown() how types */ | |
46 enum : int { | |
47 SD_RECEIVE, | |
48 SD_SEND, | |
49 SD_BOTH | |
50 } | |
51 | |
52 /* Good grief this is stupid... is it a struct? A preprocessor macro? A | |
53 struct tag? Who the hell knows!? */ | |
54 struct FD_SET { | |
55 u_int fd_count; | |
56 SOCKET[FD_SETSIZE] fd_array; | |
57 | |
58 /* this differs from the define in winsock.h and in cygwin sys/types.h */ | |
59 static void opCall(SOCKET fd, FD_SET set) { | |
60 u_int i; | |
61 for (i = 0; i < set.fd_count; i++) | |
62 if (set.fd_array[i] == fd) | |
63 break; | |
64 if (i == set.fd_count) | |
65 if (set.fd_count < FD_SETSIZE) { | |
66 set.fd_array[i] = fd; | |
67 set.fd_count++; | |
68 } | |
69 } | |
70 } | |
71 alias FD_SET* PFD_SET, LPFD_SET; | |
72 | |
73 // Keep this alias, since fd_set isn't a tag name in the original header. | |
74 alias FD_SET fd_set; | |
75 | |
76 extern(Windows) int __WSAFDIsSet(SOCKET, FD_SET*); | |
77 alias __WSAFDIsSet FD_ISSET; | |
78 | |
79 void FD_CLR(SOCKET fd, FD_SET* set) { | |
80 for (u_int i = 0; i < set.fd_count; i++) { | |
81 if (set.fd_array[i] == fd) { | |
82 while (i < set.fd_count - 1) { | |
83 set.fd_array[i] = set.fd_array[i+1]; | |
84 i++; | |
85 } | |
86 set.fd_count--; | |
87 break; | |
88 } | |
89 } | |
90 } | |
91 | |
92 void FD_ZERO(FD_SET* set) { | |
93 set.fd_count = 0; | |
94 } | |
95 | |
96 | |
97 struct TIMEVAL { | |
98 int tv_sec; | |
99 int tv_usec; | |
100 | |
101 int opCmp(TIMEVAL tv) { | |
102 if (tv_sec < tv.tv_sec) return -1; | |
103 if (tv_sec > tv.tv_sec) return 1; | |
104 if (tv_usec < tv.tv_usec) return -1; | |
105 if (tv_usec > tv.tv_usec) return 1; | |
106 return 0; | |
107 } | |
108 } | |
109 alias TIMEVAL* PTIMEVAL, LPTIMEVAL; | |
110 | |
111 bool timerisset(TIMEVAL* tvp) { | |
112 return tvp.tv_sec || tvp.tv_usec; | |
113 } | |
114 | |
115 /+ | |
116 /* DRK: These have been commented out because it was felt that using | |
117 * omCmp on the TIMEVAL struct was cleaner. Still, perhaps these should | |
118 * be enabled under a version tag for compatibility's sake? | |
119 * If it is decided that it's just ugly and unwanted, then feel free to | |
120 * delete this section :) | |
121 */ | |
122 int timercmp(TIMEVAL* tvp, TIMEVAL* uvp) { | |
123 return tvp.tv_sec != uvp.tv_sec ? | |
124 (tvp.tv_sec < uvp.tv_sec ? -1 : | |
125 (tvp.tv_sec > uvp.tv_sec ? 1 : 0)) : | |
126 (tvp.tv_usec < uvp.tv_usec ? -1 : | |
127 (tvp.tv_usec > uvp.tv_usec ? 1 : 0)); | |
128 } | |
129 | |
130 int timercmp(TIMEVAL* tvp, TIMEVAL* uvp, int function(long,long) cmp) { | |
131 return tvp.tv_sec != uvp.tv_sec ? | |
132 cmp(tvp.tv_sec, uvp.tv_sec) : | |
133 cmp(tvp.tv_usec, uvp.tv_usec); | |
134 }+/ | |
135 | |
136 void timerclear(inout TIMEVAL tvp) { | |
137 tvp.tv_sec = tvp.tv_usec = 0; | |
138 } | |
139 | |
140 struct HOSTENT { | |
141 char* h_name; | |
142 char** h_aliases; | |
143 short h_addrtype; | |
144 short h_length; | |
145 char** h_addr_list; | |
146 | |
147 char* h_addr() { return h_addr_list[0]; } | |
148 char* h_addr(char* h) { return h_addr_list[0] = h; } | |
149 } | |
150 alias HOSTENT* PHOSTENT, LPHOSTENT; | |
151 | |
152 struct LINGER { | |
153 u_short l_onoff; | |
154 u_short l_linger; | |
155 } | |
156 alias LINGER* PLINGER, LPLINGER; | |
157 | |
158 enum : DWORD { | |
159 IOCPARAM_MASK = 0x7f, | |
160 IOC_VOID = 0x20000000, | |
161 IOC_OUT = 0x40000000, | |
162 IOC_IN = 0x80000000, | |
163 IOC_INOUT = IOC_IN|IOC_OUT | |
164 } | |
165 | |
166 // NOTE: This isn't even used anywhere... | |
167 private template _IO(char x, ubyte y) { | |
168 const DWORD _IO = IOC_VOID | (cast(ubyte)x<<8) | y; | |
169 } | |
170 | |
171 private template _IOR(char x, ubyte y, t) { | |
172 const DWORD _IOR = IOC_OUT | ((t.sizeof & IOCPARAM_MASK)<<16) | |
173 | (cast(ubyte)x<<8) | y; | |
174 } | |
175 | |
176 private template _IOW(char x, ubyte y, t) { | |
177 const DWORD _IOW = IOC_IN | ((t.sizeof & IOCPARAM_MASK)<<16) | |
178 | (cast(ubyte)x<<8) | y; | |
179 } | |
180 | |
181 enum : DWORD { | |
182 FIONBIO = _IOW!('f', 126, u_long), | |
183 FIONREAD = _IOR!('f', 127, u_long), | |
184 FIOASYNC = _IOW!('f', 125, u_long), | |
185 SIOCSHIWAT = _IOW!('s', 0, u_long), | |
186 SIOCGHIWAT = _IOR!('s', 1, u_long), | |
187 SIOCSLOWAT = _IOW!('s', 2, u_long), | |
188 SIOCGLOWAT = _IOR!('s', 3, u_long), | |
189 SIOCATMARK = _IOR!('s', 7, u_long) | |
190 } | |
191 | |
192 struct netent { | |
193 char* n_name; | |
194 char** n_aliases; | |
195 short n_addrtype; | |
196 u_long n_net; | |
197 } | |
198 | |
199 struct SERVENT { | |
200 char* s_name; | |
201 char** s_aliases; | |
202 short s_port; | |
203 char* s_proto; | |
204 } | |
205 alias SERVENT* PSERVENT, LPSERVENT; | |
206 | |
207 struct PROTOENT { | |
208 char* p_name; | |
209 char** p_aliases; | |
210 short p_proto; | |
211 } | |
212 alias PROTOENT* PPROTOENT, LPPROTOENT; | |
213 | |
214 enum : int { | |
215 IPPROTO_IP = 0, | |
216 IPPROTO_ICMP = 1, | |
217 IPPROTO_IGMP = 2, | |
218 IPPROTO_GGP = 3, | |
219 IPPROTO_TCP = 6, | |
220 IPPROTO_PUP = 12, | |
221 IPPROTO_UDP = 17, | |
222 IPPROTO_IDP = 22, | |
223 IPPROTO_ND = 77, | |
224 IPPROTO_RAW = 255, | |
225 IPPROTO_MAX = 256, | |
226 | |
227 // IPv6 options | |
228 IPPROTO_HOPOPTS = 0, // IPv6 Hop-by-Hop options | |
229 IPPROTO_IPV6 = 41, // IPv6 header | |
230 IPPROTO_ROUTING = 43, // IPv6 Routing header | |
231 IPPROTO_FRAGMENT = 44, // IPv6 fragmentation header | |
232 IPPROTO_ESP = 50, // encapsulating security payload | |
233 IPPROTO_AH = 51, // authentication header | |
234 IPPROTO_ICMPV6 = 58, // ICMPv6 | |
235 IPPROTO_NONE = 59, // IPv6 no next header | |
236 IPPROTO_DSTOPTS = 60 // IPv6 Destination options | |
237 } | |
238 | |
239 enum { | |
240 IPPORT_ECHO = 7, | |
241 IPPORT_DISCARD = 9, | |
242 IPPORT_SYSTAT = 11, | |
243 IPPORT_DAYTIME = 13, | |
244 IPPORT_NETSTAT = 15, | |
245 IPPORT_FTP = 21, | |
246 IPPORT_TELNET = 23, | |
247 IPPORT_SMTP = 25, | |
248 IPPORT_TIMESERVER = 37, | |
249 IPPORT_NAMESERVER = 42, | |
250 IPPORT_WHOIS = 43, | |
251 IPPORT_MTP = 57, | |
252 IPPORT_TFTP = 69, | |
253 IPPORT_RJE = 77, | |
254 IPPORT_FINGER = 79, | |
255 IPPORT_TTYLINK = 87, | |
256 IPPORT_SUPDUP = 95, | |
257 IPPORT_EXECSERVER = 512, | |
258 IPPORT_LOGINSERVER = 513, | |
259 IPPORT_CMDSERVER = 514, | |
260 IPPORT_EFSSERVER = 520, | |
261 IPPORT_BIFFUDP = 512, | |
262 IPPORT_WHOSERVER = 513, | |
263 IPPORT_ROUTESERVER = 520, | |
264 IPPORT_RESERVED = 1024 | |
265 } | |
266 | |
267 enum { | |
268 IMPLINK_IP = 155, | |
269 IMPLINK_LOWEXPER = 156, | |
270 IMPLINK_HIGHEXPER = 158 | |
271 } | |
272 | |
273 struct IN_ADDR { | |
274 union { | |
275 struct { u_char s_b1, s_b2, s_b3, s_b4; } | |
276 struct { u_char s_net, s_host, s_lh, s_impno; } | |
277 struct { u_short s_w1, s_w2; } | |
278 struct { u_short s_w_, s_imp; } // Can I get rid of s_w_ using alignment tricks? | |
279 u_long S_addr; | |
280 u_long s_addr; | |
281 } | |
282 } | |
283 alias IN_ADDR* PIN_ADDR, LPIN_ADDR; | |
284 | |
285 // IN_CLASSx are not used anywhere or documented on MSDN. | |
286 bool IN_CLASSA(int i) { return (i & 0x80000000) == 0; } | |
287 | |
288 const IN_CLASSA_NET = 0xff000000; | |
289 const IN_CLASSA_NSHIFT = 24; | |
290 const IN_CLASSA_HOST = 0x00ffffff; | |
291 const IN_CLASSA_MAX = 128; | |
292 | |
293 bool IN_CLASSB(int i) { return (i & 0xc0000000) == 0x80000000; } | |
294 | |
295 const IN_CLASSB_NET = 0xffff0000; | |
296 const IN_CLASSB_NSHIFT = 16; | |
297 const IN_CLASSB_HOST = 0x0000ffff; | |
298 const IN_CLASSB_MAX = 65536; | |
299 | |
300 bool IN_CLASSC(int i) { return (i & 0xe0000000) == 0xc0000000; } | |
301 | |
302 const IN_CLASSC_NET = 0xffffff00; | |
303 const IN_CLASSC_NSHIFT = 8; | |
304 const IN_CLASSC_HOST = 0x000000ff; | |
305 | |
306 const u_long | |
307 INADDR_ANY = 0, | |
308 INADDR_LOOPBACK = 0x7F000001, | |
309 INADDR_BROADCAST = 0xFFFFFFFF, | |
310 INADDR_NONE = 0xFFFFFFFF; | |
311 | |
312 struct SOCKADDR_IN { | |
313 short sin_family; | |
314 u_short sin_port; | |
315 IN_ADDR sin_addr; | |
316 char[8] sin_zero; | |
317 } | |
318 alias SOCKADDR_IN* PSOCKADDR_IN, LPSOCKADDR_IN; | |
319 | |
320 const size_t | |
321 WSADESCRIPTION_LEN = 256, | |
322 WSASYS_STATUS_LEN = 128; | |
323 | |
324 struct WSADATA { | |
325 WORD wVersion; | |
326 WORD wHighVersion; | |
327 char[WSADESCRIPTION_LEN+1] szDescription; | |
328 char[WSASYS_STATUS_LEN+1] szSystemStatus; | |
329 ushort iMaxSockets; | |
330 ushort iMaxUdpDg; | |
331 char* lpVendorInfo; | |
332 } | |
333 alias WSADATA* LPWSADATA; | |
334 | |
335 // This is not documented on the MSDN site | |
336 const IP_OPTIONS = 1; | |
337 | |
338 const int | |
339 SO_OPTIONS = 1, | |
340 SO_DEBUG = 1, | |
341 SO_ACCEPTCONN = 2, | |
342 SO_REUSEADDR = 4, | |
343 SO_KEEPALIVE = 8, | |
344 SO_DONTROUTE = 16, | |
345 SO_BROADCAST = 32, | |
346 SO_USELOOPBACK = 64, | |
347 SO_LINGER = 128, | |
348 SO_OOBINLINE = 256, | |
349 SO_DONTLINGER = ~SO_LINGER, | |
350 SO_EXCLUSIVEADDRUSE= ~SO_REUSEADDR; | |
351 | |
352 enum : int { | |
353 SO_SNDBUF = 0x1001, | |
354 SO_RCVBUF, | |
355 SO_SNDLOWAT, | |
356 SO_RCVLOWAT, | |
357 SO_SNDTIMEO, | |
358 SO_RCVTIMEO, | |
359 SO_ERROR, | |
360 SO_TYPE // = 0x1008 | |
361 } | |
362 | |
363 const SOCKET INVALID_SOCKET = cast(SOCKET)(~0); | |
364 const int SOCKET_ERROR = -1; | |
365 | |
366 enum : int { | |
367 SOCK_STREAM = 1, | |
368 SOCK_DGRAM, | |
369 SOCK_RAW, | |
370 SOCK_RDM, | |
371 SOCK_SEQPACKET | |
372 } | |
373 | |
374 const int TCP_NODELAY = 0x0001; | |
375 | |
376 enum : int { | |
377 AF_UNSPEC, | |
378 AF_UNIX, | |
379 AF_INET, | |
380 AF_IMPLINK, | |
381 AF_PUP, | |
382 AF_CHAOS, | |
383 AF_IPX, // = 6 | |
384 AF_NS = 6, | |
385 AF_ISO, | |
386 AF_OSI = AF_ISO, | |
387 AF_ECMA, | |
388 AF_DATAKIT, | |
389 AF_CCITT, | |
390 AF_SNA, | |
391 AF_DECnet, | |
392 AF_DLI, | |
393 AF_LAT, | |
394 AF_HYLINK, | |
395 AF_APPLETALK, | |
396 AF_NETBIOS, | |
397 AF_VOICEVIEW, | |
398 AF_FIREFOX, | |
399 AF_UNKNOWN1, | |
400 AF_BAN, | |
401 AF_ATM, | |
402 AF_INET6, | |
403 // AF_CLUSTER, AF_12844 nad AF_NETDES are not documented on MSDN | |
404 AF_CLUSTER, | |
405 AF_12844, | |
406 AF_IRDA, // = 26 | |
407 AF_NETDES = 28, | |
408 AF_MAX // = 29 | |
409 } | |
410 | |
411 struct SOCKADDR { | |
412 u_short sa_family; | |
413 char[14] sa_data; | |
414 } | |
415 alias SOCKADDR* PSOCKADDR, LPSOCKADDR; | |
416 | |
417 /* Portable IPv6/IPv4 version of sockaddr. | |
418 Uses padding to force 8 byte alignment | |
419 and maximum size of 128 bytes */ | |
420 struct SOCKADDR_STORAGE { | |
421 short ss_family; | |
422 char[6] __ss_pad1; // pad to 8 | |
423 long __ss_align; // force alignment | |
424 char[112] __ss_pad2; // pad to 128 | |
425 } | |
426 alias SOCKADDR_STORAGE* PSOCKADDR_STORAGE; | |
427 | |
428 struct sockproto { | |
429 u_short sp_family; | |
430 u_short sp_protocol; | |
431 } | |
432 | |
433 enum : int { | |
434 PF_UNSPEC = AF_UNSPEC, | |
435 PF_UNIX = AF_UNIX, | |
436 PF_INET = AF_INET, | |
437 PF_IMPLINK = AF_IMPLINK, | |
438 PF_PUP = AF_PUP, | |
439 PF_CHAOS = AF_CHAOS, | |
440 PF_NS = AF_NS, | |
441 PF_IPX = AF_IPX, | |
442 PF_ISO = AF_ISO, | |
443 PF_OSI = AF_OSI, | |
444 PF_ECMA = AF_ECMA, | |
445 PF_DATAKIT = AF_DATAKIT, | |
446 PF_CCITT = AF_CCITT, | |
447 PF_SNA = AF_SNA, | |
448 PF_DECnet = AF_DECnet, | |
449 PF_DLI = AF_DLI, | |
450 PF_LAT = AF_LAT, | |
451 PF_HYLINK = AF_HYLINK, | |
452 PF_APPLETALK = AF_APPLETALK, | |
453 PF_VOICEVIEW = AF_VOICEVIEW, | |
454 PF_FIREFOX = AF_FIREFOX, | |
455 PF_UNKNOWN1 = AF_UNKNOWN1, | |
456 PF_BAN = AF_BAN, | |
457 PF_ATM = AF_ATM, | |
458 PF_INET6 = AF_INET6, | |
459 PF_MAX = AF_MAX | |
460 } | |
461 | |
462 const int SOL_SOCKET = 0xFFFF; | |
463 | |
464 const int SOMAXCONN = 5; | |
465 | |
466 const int | |
467 MSG_OOB = 1, | |
468 MSG_PEEK = 2, | |
469 MSG_DONTROUTE = 4, | |
470 MSG_MAXIOVLEN = 16, | |
471 MSG_PARTIAL = 0x8000; | |
472 | |
473 const size_t MAXGETHOSTSTRUCT = 1024; | |
474 | |
475 // Not documented on MSDN | |
476 enum { | |
477 FD_READ_BIT, | |
478 FD_WRITE_BIT, | |
479 FD_OOB_BIT, | |
480 FD_ACCEPT_BIT, | |
481 FD_CONNECT_BIT, | |
482 FD_CLOSE_BIT, | |
483 FD_QOS_BIT, | |
484 FD_GROUP_QOS_BIT, | |
485 FD_ROUTING_INTERFACE_CHANGE_BIT, | |
486 FD_ADDRESS_LIST_CHANGE_BIT, | |
487 FD_MAX_EVENTS // = 10 | |
488 } | |
489 | |
490 const int | |
491 FD_READ = 1 << FD_READ_BIT, | |
492 FD_WRITE = 1 << FD_WRITE_BIT, | |
493 FD_OOB = 1 << FD_OOB_BIT, | |
494 FD_ACCEPT = 1 << FD_ACCEPT_BIT, | |
495 FD_CONNECT = 1 << FD_CONNECT_BIT, | |
496 FD_CLOSE = 1 << FD_CLOSE_BIT, | |
497 FD_QOS = 1 << FD_QOS_BIT, | |
498 FD_GROUP_QOS = 1 << FD_GROUP_QOS_BIT, | |
499 FD_ROUTING_INTERFACE_CHANGE = 1 << FD_ROUTING_INTERFACE_CHANGE_BIT, | |
500 FD_ADDRESS_LIST_CHANGE = 1 << FD_ADDRESS_LIST_CHANGE_BIT, | |
501 FD_ALL_EVENTS = (1 << FD_MAX_EVENTS) - 1; | |
502 | |
503 enum : int { | |
504 WSABASEERR = 10000, | |
505 WSAEINTR = WSABASEERR + 4, | |
506 WSAEBADF = WSABASEERR + 9, | |
507 WSAEACCES = WSABASEERR + 13, | |
508 WSAEFAULT = WSABASEERR + 14, | |
509 WSAEINVAL = WSABASEERR + 22, | |
510 WSAEMFILE = WSABASEERR + 24, | |
511 WSAEWOULDBLOCK = WSABASEERR + 35, | |
512 WSAEINPROGRESS = WSABASEERR + 36, // deprecated on WinSock2 | |
513 WSAEALREADY = WSABASEERR + 37, | |
514 WSAENOTSOCK = WSABASEERR + 38, | |
515 WSAEDESTADDRREQ = WSABASEERR + 39, | |
516 WSAEMSGSIZE = WSABASEERR + 40, | |
517 WSAEPROTOTYPE = WSABASEERR + 41, | |
518 WSAENOPROTOOPT = WSABASEERR + 42, | |
519 WSAEPROTONOSUPPORT = WSABASEERR + 43, | |
520 WSAESOCKTNOSUPPORT = WSABASEERR + 44, | |
521 WSAEOPNOTSUPP = WSABASEERR + 45, | |
522 WSAEPFNOSUPPORT = WSABASEERR + 46, | |
523 WSAEAFNOSUPPORT = WSABASEERR + 47, | |
524 WSAEADDRINUSE = WSABASEERR + 48, | |
525 WSAEADDRNOTAVAIL = WSABASEERR + 49, | |
526 WSAENETDOWN = WSABASEERR + 50, | |
527 WSAENETUNREACH = WSABASEERR + 51, | |
528 WSAENETRESET = WSABASEERR + 52, | |
529 WSAECONNABORTED = WSABASEERR + 53, | |
530 WSAECONNRESET = WSABASEERR + 54, | |
531 WSAENOBUFS = WSABASEERR + 55, | |
532 WSAEISCONN = WSABASEERR + 56, | |
533 WSAENOTCONN = WSABASEERR + 57, | |
534 WSAESHUTDOWN = WSABASEERR + 58, | |
535 WSAETOOMANYREFS = WSABASEERR + 59, | |
536 WSAETIMEDOUT = WSABASEERR + 60, | |
537 WSAECONNREFUSED = WSABASEERR + 61, | |
538 WSAELOOP = WSABASEERR + 62, | |
539 WSAENAMETOOLONG = WSABASEERR + 63, | |
540 WSAEHOSTDOWN = WSABASEERR + 64, | |
541 WSAEHOSTUNREACH = WSABASEERR + 65, | |
542 WSAENOTEMPTY = WSABASEERR + 66, | |
543 WSAEPROCLIM = WSABASEERR + 67, | |
544 WSAEUSERS = WSABASEERR + 68, | |
545 WSAEDQUOT = WSABASEERR + 69, | |
546 WSAESTALE = WSABASEERR + 70, | |
547 WSAEREMOTE = WSABASEERR + 71, | |
548 WSAEDISCON = WSABASEERR + 101, | |
549 WSASYSNOTREADY = WSABASEERR + 91, | |
550 WSAVERNOTSUPPORTED = WSABASEERR + 92, | |
551 WSANOTINITIALISED = WSABASEERR + 93, | |
552 WSAHOST_NOT_FOUND = WSABASEERR + 1001, | |
553 WSATRY_AGAIN = WSABASEERR + 1002, | |
554 WSANO_RECOVERY = WSABASEERR + 1003, | |
555 WSANO_DATA = WSABASEERR + 1004, | |
556 WSANO_ADDRESS = WSANO_DATA, | |
557 | |
558 // WinSock2 specific error codes | |
559 WSAENOMORE = WSABASEERR + 102, | |
560 WSAECANCELLED = WSABASEERR + 103, | |
561 WSAEINVALIDPROCTABLE = WSABASEERR + 104, | |
562 WSAEINVALIDPROVIDER = WSABASEERR + 105, | |
563 WSAEPROVIDERFAILEDINIT = WSABASEERR + 106, | |
564 WSASYSCALLFAILURE = WSABASEERR + 107, | |
565 WSASERVICE_NOT_FOUND = WSABASEERR + 108, | |
566 WSATYPE_NOT_FOUND = WSABASEERR + 109, | |
567 WSA_E_NO_MORE = WSABASEERR + 110, | |
568 WSA_E_CANCELLED = WSABASEERR + 111, | |
569 WSAEREFUSED = WSABASEERR + 112, | |
570 | |
571 // WS QualityofService errors | |
572 WSA_QOS_RECEIVERS = WSABASEERR + 1005, | |
573 WSA_QOS_SENDERS = WSABASEERR + 1006, | |
574 WSA_QOS_NO_SENDERS = WSABASEERR + 1007, | |
575 WSA_QOS_NO_RECEIVERS = WSABASEERR + 1008, | |
576 WSA_QOS_REQUEST_CONFIRMED = WSABASEERR + 1009, | |
577 WSA_QOS_ADMISSION_FAILURE = WSABASEERR + 1010, | |
578 WSA_QOS_POLICY_FAILURE = WSABASEERR + 1011, | |
579 WSA_QOS_BAD_STYLE = WSABASEERR + 1012, | |
580 WSA_QOS_BAD_OBJECT = WSABASEERR + 1013, | |
581 WSA_QOS_TRAFFIC_CTRL_ERROR = WSABASEERR + 1014, | |
582 WSA_QOS_GENERIC_ERROR = WSABASEERR + 1015, | |
583 WSA_QOS_ESERVICETYPE = WSABASEERR + 1016, | |
584 WSA_QOS_EFLOWSPEC = WSABASEERR + 1017, | |
585 WSA_QOS_EPROVSPECBUF = WSABASEERR + 1018, | |
586 WSA_QOS_EFILTERSTYLE = WSABASEERR + 1019, | |
587 WSA_QOS_EFILTERTYPE = WSABASEERR + 1020, | |
588 WSA_QOS_EFILTERCOUNT = WSABASEERR + 1021, | |
589 WSA_QOS_EOBJLENGTH = WSABASEERR + 1022, | |
590 WSA_QOS_EFLOWCOUNT = WSABASEERR + 1023, | |
591 WSA_QOS_EUNKOWNPSOBJ = WSABASEERR + 1024, | |
592 WSA_QOS_EPOLICYOBJ = WSABASEERR + 1025, | |
593 WSA_QOS_EFLOWDESC = WSABASEERR + 1026, | |
594 WSA_QOS_EPSFLOWSPEC = WSABASEERR + 1027, | |
595 WSA_QOS_EPSFILTERSPEC = WSABASEERR + 1028, | |
596 WSA_QOS_ESDMODEOBJ = WSABASEERR + 1029, | |
597 WSA_QOS_ESHAPERATEOBJ = WSABASEERR + 1030, | |
598 WSA_QOS_RESERVED_PETYPE = WSABASEERR + 1031 | |
599 } | |
600 | |
601 alias WSAGetLastError h_errno; | |
602 | |
603 enum : int { | |
604 HOST_NOT_FOUND = WSAHOST_NOT_FOUND, | |
605 TRY_AGAIN = WSATRY_AGAIN, | |
606 NO_RECOVERY = WSANO_RECOVERY, | |
607 NO_DATA = WSANO_DATA, | |
608 NO_ADDRESS = WSANO_ADDRESS | |
609 } | |
610 | |
611 extern (Windows) { | |
612 SOCKET accept(SOCKET, SOCKADDR*, int*); | |
613 int bind(SOCKET, SOCKADDR*, int); | |
614 int closesocket(SOCKET); | |
615 int connect(SOCKET, SOCKADDR*, int); | |
616 int ioctlsocket(SOCKET, int, u_long*); | |
617 int getpeername(SOCKET, SOCKADDR*, int*); | |
618 int getsockname(SOCKET, SOCKADDR*, int*); | |
619 int getsockopt(SOCKET, int, int, void*, int*); | |
620 uint inet_addr(char*); | |
621 int listen(SOCKET, int); | |
622 int recv(SOCKET, ubyte*, int, int); | |
623 int recvfrom(SOCKET, ubyte*, int, int, SOCKADDR*, int*); | |
624 int send(SOCKET, ubyte*, int, int); | |
625 int sendto(SOCKET, ubyte*, int, int, SOCKADDR*, int); | |
626 int setsockopt(SOCKET, int, int, void*, int); | |
627 int shutdown(SOCKET, int); | |
628 SOCKET socket(int, int, int); | |
629 | |
630 alias typeof(&accept) LPFN_ACCEPT; | |
631 alias typeof(&bind) LPFN_BIND; | |
632 alias typeof(&closesocket) LPFN_CLOSESOCKET; | |
633 alias typeof(&connect) LPFN_CONNECT; | |
634 alias typeof(&ioctlsocket) LPFN_IOCTLSOCKET; | |
635 alias typeof(&getpeername) LPFN_GETPEERNAME; | |
636 alias typeof(&getsockname) LPFN_GETSOCKNAME; | |
637 alias typeof(&getsockopt) LPFN_GETSOCKOPT; | |
638 alias typeof(&inet_addr) LPFN_INET_ADDR; | |
639 alias typeof(&listen) LPFN_LISTEN; | |
640 alias typeof(&recv) LPFN_RECV; | |
641 alias typeof(&recvfrom) LPFN_RECVFROM; | |
642 alias typeof(&send) LPFN_SEND; | |
643 alias typeof(&sendto) LPFN_SENDTO; | |
644 alias typeof(&setsockopt) LPFN_SETSOCKOPT; | |
645 alias typeof(&shutdown) LPFN_SHUTDOWN; | |
646 alias typeof(&socket) LPFN_SOCKET; | |
647 } | |
648 | |
649 extern(Windows) { | |
650 char* inet_ntoa(IN_ADDR); | |
651 HOSTENT* gethostbyaddr(char*, int, int); | |
652 HOSTENT* gethostbyname(char*); | |
653 SERVENT* getservbyport(int, char*); | |
654 SERVENT* getservbyname(char*, char*); | |
655 PROTOENT* getprotobynumber(int); | |
656 PROTOENT* getprotobyname(char*); | |
657 | |
658 /* NOTE: DK: in the original headers, these were declared with | |
659 PASCAL linkage. Since this is at odds with the definition | |
660 of the functions themselves, and also since MinGW seems to | |
661 treat the two interchangably, I have moved them here. */ | |
662 alias typeof(&inet_ntoa) LPFN_INET_NTOA; | |
663 alias typeof(&gethostbyaddr) LPFN_GETHOSTBYADDR; | |
664 alias typeof(&gethostbyname) LPFN_GETHOSTBYNAME; | |
665 alias typeof(&getservbyport) LPFN_GETSERVBYPORT; | |
666 alias typeof(&getservbyname) LPFN_GETSERVBYNAME; | |
667 alias typeof(&getprotobynumber) LPFN_GETPROTOBYNUMBER; | |
668 alias typeof(&getprotobyname) LPFN_GETPROTOBYNAME; | |
669 } | |
670 | |
671 extern(Windows) { | |
672 int WSAStartup(WORD, LPWSADATA); | |
673 int WSACleanup(); | |
674 void WSASetLastError(int); | |
675 int WSAGetLastError(); | |
676 | |
677 alias typeof(&WSAStartup) LPFN_WSASTARTUP; | |
678 alias typeof(&WSACleanup) LPFN_WSACLEANUP; | |
679 alias typeof(&WSASetLastError) LPFN_WSASETLASTERROR; | |
680 alias typeof(&WSAGetLastError) LPFN_WSAGETLASTERROR; | |
681 } | |
682 | |
683 /* | |
684 * Pseudo-blocking functions are deprecated in WinSock2 | |
685 * spec. Use threads instead. | |
686 */ | |
687 deprecated extern(Windows) { | |
688 BOOL WSAIsBlocking(); | |
689 int WSAUnhookBlockingHook(); | |
690 FARPROC WSASetBlockingHook(FARPROC); | |
691 int WSACancelBlockingCall(); | |
692 | |
693 alias typeof(&WSAIsBlocking) LPFN_WSAISBLOCKING; | |
694 alias typeof(&WSAUnhookBlockingHook) LPFN_WSAUNHOOKBLOCKINGHOOK; | |
695 alias typeof(&WSASetBlockingHook) LPFN_WSASETBLOCKINGHOOK; | |
696 alias typeof(&WSACancelBlockingCall) LPFN_WSACANCELBLOCKINGCALL; | |
697 } | |
698 | |
699 extern(Windows) { | |
700 HANDLE WSAAsyncGetServByName(HWND, u_int, char*, char*, char*, int); | |
701 HANDLE WSAAsyncGetServByPort(HWND, u_int, int, char*, char*, int); | |
702 HANDLE WSAAsyncGetProtoByName(HWND, u_int, char*, char*, int); | |
703 HANDLE WSAAsyncGetProtoByNumber(HWND, u_int, int, char*, int); | |
704 HANDLE WSAAsyncGetHostByName(HWND, u_int, char*, char*, int); | |
705 HANDLE WSAAsyncGetHostByAddr(HWND, u_int, char*, int, int, char*, int); | |
706 int WSACancelAsyncRequest(HANDLE); | |
707 int WSAAsyncSelect(SOCKET, HWND, u_int, long); | |
708 | |
709 alias typeof(&WSAAsyncGetServByName) LPFN_WSAAsyncGetServByName; | |
710 alias typeof(&WSAAsyncGetServByPort) LPFN_WSAASYNCGETSERVBYPORT; | |
711 alias typeof(&WSAAsyncGetProtoByName) LPFN_WSAASYNCGETPROTOBYNAME; | |
712 alias typeof(&WSAAsyncGetProtoByNumber) LPFN_WSAASYNCGETPROTOBYNUMBER; | |
713 alias typeof(&WSAAsyncGetHostByName) LPFN_WSAASYNCGETHOSTBYNAME; | |
714 alias typeof(&WSAAsyncGetHostByAddr) LPFN_WSAASYNCGETHOSTBYADDR; | |
715 alias typeof(&WSACancelAsyncRequest) LPFN_WSACANCELASYNCREQUEST; | |
716 alias typeof(&WSAAsyncSelect) LPFN_WSAASYNCSELECT; | |
717 } | |
718 | |
719 extern(Windows) { | |
720 u_long htonl(u_long); | |
721 u_long ntohl(u_long); | |
722 u_short htons(u_short); | |
723 u_short ntohs(u_short); | |
724 int select(int nfds, fd_set*, fd_set*, fd_set*, TIMEVAL*); | |
725 | |
726 alias typeof(&htonl) LPFN_HTONL; | |
727 alias typeof(&ntohl) LPFN_NTOHL; | |
728 alias typeof(&htons) LPFN_HTONS; | |
729 alias typeof(&ntohs) LPFN_NTOHS; | |
730 alias typeof(&select) LPFN_SELECT; | |
731 | |
732 int gethostname(char*, int); | |
733 alias typeof(&gethostname) LPFN_GETHOSTNAME; | |
734 } | |
735 | |
736 alias MAKELONG WSAMAKEASYNCREPLY, WSAMAKESELECTREPLY; | |
737 alias LOWORD WSAGETASYNCBUFLEN, WSAGETSELECTEVENT; | |
738 alias HIWORD WSAGETASYNCERROR, WSAGETSELECTERROR; | |
739 | |
740 | |
741 alias INADDR_ANY ADDR_ANY; | |
742 | |
743 bool IN_CLASSD(int i) { return (i & 0xf0000000) == 0xe0000000; } | |
744 | |
745 const IN_CLASSD_NET = 0xf0000000; | |
746 const IN_CLASSD_NSHIFT = 28; | |
747 const IN_CLASSD_HOST = 0x0fffffff; | |
748 | |
749 alias IN_CLASSD IN_MULTICAST; | |
750 | |
751 const FROM_PROTOCOL_INFO = -1; | |
752 | |
753 enum : int { | |
754 SO_GROUP_ID = 0x2001, | |
755 SO_GROUP_PRIORITY, | |
756 SO_MAX_MSG_SIZE, | |
757 SO_PROTOCOL_INFOA, | |
758 SO_PROTOCOL_INFOW | |
759 } | |
760 // NOTE: These are logically part of the previous enum, but you can't | |
761 // have version statements in an enum body... | |
762 version(Unicode) | |
763 const int SO_PROTOCOL_INFO = SO_PROTOCOL_INFOW; | |
764 else | |
765 const int SO_PROTOCOL_INFO = SO_PROTOCOL_INFOA; | |
766 | |
767 const PVD_CONFIG = 0x3001; | |
768 | |
769 const MSG_INTERRUPT = 0x10; | |
770 //const MSG_MAXIOVLEN = 16; // Already declared above | |
771 | |
772 alias HANDLE WSAEVENT; | |
773 alias LPHANDLE LPWSAEVENT; | |
774 alias OVERLAPPED WSAOVERLAPPED; | |
775 alias OVERLAPPED* LPWSAOVERLAPPED; | |
776 | |
777 private import win32.winerror; | |
778 private import win32.winbase; | |
779 | |
780 enum { | |
781 WSA_IO_PENDING = ERROR_IO_PENDING, | |
782 WSA_IO_INCOMPLETE = ERROR_IO_INCOMPLETE, | |
783 WSA_INVALID_HANDLE = ERROR_INVALID_HANDLE, | |
784 WSA_INVALID_PARAMETER = ERROR_INVALID_PARAMETER, | |
785 WSA_NOT_ENOUGH_MEMORY = ERROR_NOT_ENOUGH_MEMORY, | |
786 WSA_OPERATION_ABORTED = ERROR_OPERATION_ABORTED | |
787 } | |
788 | |
789 const WSA_INVALID_EVENT = cast(WSAEVENT)null; | |
790 const WSA_MAXIMUM_WAIT_EVENTS = MAXIMUM_WAIT_OBJECTS; | |
791 const WSA_WAIT_FAILED = cast(DWORD)-1; | |
792 const WSA_WAIT_EVENT_0 = WAIT_OBJECT_0; | |
793 const WSA_WAIT_IO_COMPLETION = WAIT_IO_COMPLETION; | |
794 const WSA_WAIT_TIMEOUT = WAIT_TIMEOUT; | |
795 const WSA_INFINITE = INFINITE; | |
796 | |
797 struct WSABUF { | |
798 uint len; | |
799 char* buf; | |
800 } | |
801 | |
802 alias WSABUF* LPWSABUF; | |
803 | |
804 enum GUARANTEE { | |
805 BestEffortService, | |
806 ControlledLoadService, | |
807 PredictiveService, | |
808 GuaranteedDelayService, | |
809 GuaranteedService | |
810 } | |
811 | |
812 /* TODO: FLOWSPEC and related definitions belong in qos.h */ | |
813 | |
814 /* | |
815 Windows Sockets 2 Application Programming Interface, | |
816 revision 2.2.2 (1997) uses the type uint32 for SERVICETYPE | |
817 and the elements of _flowspec, but the type uint32 is not defined | |
818 or used anywhere else in the w32api. For now, just use | |
819 unsigned int, which is 32 bits on _WIN32 and _WIN64. | |
820 */ | |
821 | |
822 alias uint SERVICETYPE; | |
823 | |
824 struct FLOWSPEC { | |
825 uint TokenRate; | |
826 uint TokenBucketSize; | |
827 uint PeakBandwidth; | |
828 uint Latency; | |
829 uint DelayVariation; | |
830 SERVICETYPE ServiceType; | |
831 uint MaxSduSize; | |
832 uint MinimumPolicedSize; | |
833 } | |
834 | |
835 alias FLOWSPEC* PFLOWSPEC, LPFLOWSPEC; | |
836 | |
837 struct QOS | |
838 { | |
839 FLOWSPEC SendingFlowspec; | |
840 FLOWSPEC ReceivingFlowspec; | |
841 WSABUF ProviderSpecific; | |
842 } | |
843 | |
844 alias QOS* LPQOS; | |
845 | |
846 enum { | |
847 CF_ACCEPT, | |
848 CF_REJECT, | |
849 CF_DEFER | |
850 } | |
851 | |
852 // REM: Already defined above | |
853 /*enum { | |
854 SD_RECEIVE, | |
855 SD_SEND, | |
856 SD_BOTH | |
857 }*/ | |
858 | |
859 alias uint GROUP; | |
860 | |
861 enum { | |
862 SG_UNCONSTRAINED_GROUP = 0x01, | |
863 SG_CONSTRAINED_GROUP | |
864 } | |
865 | |
866 struct WSANETWORKEVENTS { | |
867 int lNetworkEvents; | |
868 int[FD_MAX_EVENTS] iErrorCode; | |
869 } | |
870 | |
871 alias WSANETWORKEVENTS* LPWSANETWORKEVENTS; | |
872 | |
873 const MAX_PROTOCOL_CHAIN = 7; | |
874 | |
875 const BASE_PROTOCOL = 1; | |
876 const LAYERED_PROTOCOL = 0; | |
877 | |
878 enum WSAESETSERVICEOP | |
879 { | |
880 RNRSERVICE_REGISTER = 0, | |
881 RNRSERVICE_DEREGISTER, | |
882 RNRSERVICE_DELETE | |
883 } | |
884 | |
885 alias WSAESETSERVICEOP* PWSAESETSERVICEOP, LPWSAESETSERVICEOP; | |
886 | |
887 struct AFPROTOCOLS { | |
888 INT iAddressFamily; | |
889 INT iProtocol; | |
890 } | |
891 | |
892 alias AFPROTOCOLS* PAFPROTOCOLS, LPAFPROTOCOLS; | |
893 | |
894 enum WSAECOMPARATOR | |
895 { | |
896 COMP_EQUAL = 0, | |
897 COMP_NOTLESS | |
898 } | |
899 | |
900 alias WSAECOMPARATOR* PWSAECOMPARATOR, LPWSAECOMPARATOR; | |
901 | |
902 struct WSAVERSION | |
903 { | |
904 DWORD dwVersion; | |
905 WSAECOMPARATOR ecHow; | |
906 } | |
907 | |
908 alias WSAVERSION* PWSAVERSION, LPWSAVERSION; | |
909 | |
910 // Import for SOCKET_ADDRESS, CSADDR_INFO | |
911 // import win32.nspapi; | |
912 //#ifndef __CSADDR_T_DEFINED /* also in nspapi.h */ | |
913 //#define __CSADDR_T_DEFINED | |
914 | |
915 struct SOCKET_ADDRESS { | |
916 LPSOCKADDR lpSockaddr; | |
917 INT iSockaddrLength; | |
918 } | |
919 | |
920 alias SOCKET_ADDRESS* PSOCKET_ADDRESS, LPSOCKET_ADDRESS; | |
921 | |
922 struct CSADDR_INFO { | |
923 SOCKET_ADDRESS LocalAddr; | |
924 SOCKET_ADDRESS RemoteAddr; | |
925 INT iSocketType; | |
926 INT iProtocol; | |
927 } | |
928 | |
929 alias CSADDR_INFO* PCSADDR_INFO, LPCSADDR_INFO; | |
930 | |
931 //#endif | |
932 | |
933 struct SOCKET_ADDRESS_LIST { | |
934 INT iAddressCount; | |
935 SOCKET_ADDRESS[1] _Address; | |
936 SOCKET_ADDRESS* Address() { return _Address.ptr; } | |
937 } | |
938 | |
939 alias SOCKET_ADDRESS_LIST* LPSOCKET_ADDRESS_LIST; | |
940 | |
941 // TODO: Import wtypes/nspapi? | |
942 //#ifndef __BLOB_T_DEFINED /* also in wtypes.h and nspapi.h */ | |
943 //#define __BLOB_T_DEFINED | |
944 struct BLOB { | |
945 ULONG cbSize; | |
946 BYTE* pBlobData; | |
947 } | |
948 | |
949 alias BLOB* PBLOB, LPBLOB; | |
950 //#endif | |
951 | |
952 struct WSAQUERYSETA | |
953 { | |
954 DWORD dwSize; | |
955 LPSTR lpszServiceInstanceName; | |
956 LPGUID lpServiceClassId; | |
957 LPWSAVERSION lpVersion; | |
958 LPSTR lpszComment; | |
959 DWORD dwNameSpace; | |
960 LPGUID lpNSProviderId; | |
961 LPSTR lpszContext; | |
962 DWORD dwNumberOfProtocols; | |
963 LPAFPROTOCOLS lpafpProtocols; | |
964 LPSTR lpszQueryString; | |
965 DWORD dwNumberOfCsAddrs; | |
966 LPCSADDR_INFO lpcsaBuffer; | |
967 DWORD dwOutputFlags; | |
968 LPBLOB lpBlob; | |
969 } | |
970 | |
971 alias WSAQUERYSETA* PWSAQUERYSETA, LPWSAQUERYSETA; | |
972 | |
973 struct WSAQUERYSETW | |
974 { | |
975 DWORD dwSize; | |
976 LPWSTR lpszServiceInstanceName; | |
977 LPGUID lpServiceClassId; | |
978 LPWSAVERSION lpVersion; | |
979 LPWSTR lpszComment; | |
980 DWORD dwNameSpace; | |
981 LPGUID lpNSProviderId; | |
982 LPWSTR lpszContext; | |
983 DWORD dwNumberOfProtocols; | |
984 LPAFPROTOCOLS lpafpProtocols; | |
985 LPWSTR lpszQueryString; | |
986 DWORD dwNumberOfCsAddrs; | |
987 LPCSADDR_INFO lpcsaBuffer; | |
988 DWORD dwOutputFlags; | |
989 LPBLOB lpBlob; | |
990 } | |
991 | |
992 | |
993 alias WSAQUERYSETW* PWSAQUERYSETW, LPWSAQUERYSETW; | |
994 | |
995 version(Unicode) { | |
996 alias WSAQUERYSETW WSAQUERYSET; | |
997 alias PWSAQUERYSETW PWSAQUERYSET; | |
998 alias LPWSAQUERYSETW LPWSAQUERYSET; | |
999 } else { | |
1000 alias WSAQUERYSETA WSAQUERYSET; | |
1001 alias PWSAQUERYSETA PWSAQUERYSET; | |
1002 alias LPWSAQUERYSETA LPWSAQUERYSET; | |
1003 } | |
1004 | |
1005 const int | |
1006 LUP_DEEP = 0x0001, | |
1007 LUP_CONTAINERS = 0x0002, | |
1008 LUP_NOCONTAINERS = 0x0004, | |
1009 LUP_NEAREST = 0x0008, | |
1010 LUP_RETURN_NAME = 0x0010, | |
1011 LUP_RETURN_TYPE = 0x0020, | |
1012 LUP_RETURN_VERSION = 0x0040, | |
1013 LUP_RETURN_COMMENT = 0x0080, | |
1014 LUP_RETURN_ADDR = 0x0100, | |
1015 LUP_RETURN_BLOB = 0x0200, | |
1016 LUP_RETURN_ALIASES = 0x0400, | |
1017 LUP_RETURN_QUERY_STRING = 0x0800, | |
1018 LUP_RETURN_ALL = 0x0FF0, | |
1019 LUP_RES_SERVICE = 0x8000, | |
1020 LUP_FLUSHCACHE = 0x1000, | |
1021 LUP_FLUSHPREVIOUS = 0x2000; | |
1022 | |
1023 struct WSANSCLASSINFOA | |
1024 { | |
1025 LPSTR lpszName; | |
1026 DWORD dwNameSpace; | |
1027 DWORD dwValueType; | |
1028 DWORD dwValueSize; | |
1029 LPVOID lpValue; | |
1030 } | |
1031 | |
1032 alias WSANSCLASSINFOA* PWSANSCLASSINFOA, LPWSANSCLASSINFOA; | |
1033 | |
1034 struct WSANSCLASSINFOW | |
1035 { | |
1036 LPWSTR lpszName; | |
1037 DWORD dwNameSpace; | |
1038 DWORD dwValueType; | |
1039 DWORD dwValueSize; | |
1040 LPVOID lpValue; | |
1041 } | |
1042 | |
1043 alias WSANSCLASSINFOW* PWSANSCLASSINFOW, LPWSANSCLASSINFOW; | |
1044 | |
1045 version(Unicode) { | |
1046 alias WSANSCLASSINFOW WSANSCLASSINFO; | |
1047 alias PWSANSCLASSINFOW PWSANSCLASSINFO; | |
1048 alias LPWSANSCLASSINFOW LPWSANSCLASSINFO; | |
1049 } else { | |
1050 alias WSANSCLASSINFOA WSANSCLASSINFO; | |
1051 alias PWSANSCLASSINFOA PWSANSCLASSINFO; | |
1052 alias LPWSANSCLASSINFOA LPWSANSCLASSINFO; | |
1053 } | |
1054 | |
1055 struct WSASERVICECLASSINFOA | |
1056 { | |
1057 LPGUID lpServiceClassId; | |
1058 LPSTR lpszServiceClassName; | |
1059 DWORD dwCount; | |
1060 LPWSANSCLASSINFOA lpClassInfos; | |
1061 } | |
1062 | |
1063 alias WSASERVICECLASSINFOA* PWSASERVICECLASSINFOA, LPWSASERVICECLASSINFOA; | |
1064 | |
1065 struct WSASERVICECLASSINFOW | |
1066 { | |
1067 LPGUID lpServiceClassId; | |
1068 LPWSTR lpszServiceClassName; | |
1069 DWORD dwCount; | |
1070 LPWSANSCLASSINFOW lpClassInfos; | |
1071 } | |
1072 | |
1073 alias WSASERVICECLASSINFOW* PWSASERVICECLASSINFOW, LPWSASERVICECLASSINFOW; | |
1074 | |
1075 version(Unicode) { | |
1076 alias WSASERVICECLASSINFOW WSASERVICECLASSINFO; | |
1077 alias PWSASERVICECLASSINFOW PWSASERVICECLASSINFO; | |
1078 alias LPWSASERVICECLASSINFOW LPWSASERVICECLASSINFO; | |
1079 } else { | |
1080 alias WSASERVICECLASSINFOA WSASERVICECLASSINFO; | |
1081 alias PWSASERVICECLASSINFOA PWSASERVICECLASSINFO; | |
1082 alias LPWSASERVICECLASSINFOA LPWSASERVICECLASSINFO; | |
1083 } | |
1084 | |
1085 struct WSANAMESPACE_INFOA { | |
1086 GUID NSProviderId; | |
1087 DWORD dwNameSpace; | |
1088 BOOL fActive; | |
1089 DWORD dwVersion; | |
1090 LPSTR lpszIdentifier; | |
1091 } | |
1092 | |
1093 alias WSANAMESPACE_INFOA* PWSANAMESPACE_INFOA, LPWSANAMESPACE_INFOA; | |
1094 | |
1095 struct WSANAMESPACE_INFOW { | |
1096 GUID NSProviderId; | |
1097 DWORD dwNameSpace; | |
1098 BOOL fActive; | |
1099 DWORD dwVersion; | |
1100 LPWSTR lpszIdentifier; | |
1101 } | |
1102 | |
1103 alias WSANAMESPACE_INFOW* PWSANAMESPACE_INFOW, LPWSANAMESPACE_INFOW; | |
1104 | |
1105 version(Unicode) { | |
1106 alias WSANAMESPACE_INFOW WSANAMESPACE_INFO; | |
1107 alias PWSANAMESPACE_INFOW PWSANAMESPACE_INFO; | |
1108 alias LPWSANAMESPACE_INFOW LPWSANAMESPACE_INFO; | |
1109 } else { | |
1110 alias WSANAMESPACE_INFOA WSANAMESPACE_INFO; | |
1111 alias PWSANAMESPACE_INFOA PWSANAMESPACE_INFO; | |
1112 alias LPWSANAMESPACE_INFOA LPWSANAMESPACE_INFO; | |
1113 } | |
1114 | |
1115 struct WSAPROTOCOLCHAIN { | |
1116 int ChainLen; | |
1117 DWORD[MAX_PROTOCOL_CHAIN] ChainEntries; | |
1118 } | |
1119 | |
1120 alias WSAPROTOCOLCHAIN* LPWSAPROTOCOLCHAIN; | |
1121 | |
1122 const WSAPROTOCOL_LEN = 255; | |
1123 | |
1124 struct WSAPROTOCOL_INFOA { | |
1125 DWORD dwServiceFlags1; | |
1126 DWORD dwServiceFlags2; | |
1127 DWORD dwServiceFlags3; | |
1128 DWORD dwServiceFlags4; | |
1129 DWORD dwProviderFlags; | |
1130 GUID ProviderId; | |
1131 DWORD dwCatalogEntryId; | |
1132 WSAPROTOCOLCHAIN ProtocolChain; | |
1133 int iVersion; | |
1134 int iAddressFamily; | |
1135 int iMaxSockAddr; | |
1136 int iMinSockAddr; | |
1137 int iSocketType; | |
1138 int iProtocol; | |
1139 int iProtocolMaxOffset; | |
1140 int iNetworkByteOrder; | |
1141 int iSecurityScheme; | |
1142 DWORD dwMessageSize; | |
1143 DWORD dwProviderReserved; | |
1144 CHAR[WSAPROTOCOL_LEN+1] szProtocol; | |
1145 } | |
1146 | |
1147 alias WSAPROTOCOL_INFOA* LPWSAPROTOCOL_INFOA; | |
1148 | |
1149 struct WSAPROTOCOL_INFOW { | |
1150 DWORD dwServiceFlags1; | |
1151 DWORD dwServiceFlags2; | |
1152 DWORD dwServiceFlags3; | |
1153 DWORD dwServiceFlags4; | |
1154 DWORD dwProviderFlags; | |
1155 GUID ProviderId; | |
1156 DWORD dwCatalogEntryId; | |
1157 WSAPROTOCOLCHAIN ProtocolChain; | |
1158 int iVersion; | |
1159 int iAddressFamily; | |
1160 int iMaxSockAddr; | |
1161 int iMinSockAddr; | |
1162 int iSocketType; | |
1163 int iProtocol; | |
1164 int iProtocolMaxOffset; | |
1165 int iNetworkByteOrder; | |
1166 int iSecurityScheme; | |
1167 DWORD dwMessageSize; | |
1168 DWORD dwProviderReserved; | |
1169 WCHAR[WSAPROTOCOL_LEN+1] szProtocol; | |
1170 } | |
1171 | |
1172 alias WSAPROTOCOL_INFOW* LPWSAPROTOCOL_INFOW; | |
1173 | |
1174 // TODO: Below fptr was defined as "CALLBACK" for linkage; is this right? | |
1175 extern(C) { | |
1176 alias int function(LPWSABUF, LPWSABUF, LPQOS, LPQOS, LPWSABUF, LPWSABUF, GROUP *, DWORD) LPCONDITIONPROC; | |
1177 } | |
1178 | |
1179 extern(Windows) { | |
1180 alias void function(DWORD, DWORD, LPWSAOVERLAPPED, DWORD) LPWSAOVERLAPPED_COMPLETION_ROUTINE; | |
1181 } | |
1182 | |
1183 version(Unicode) { | |
1184 alias WSAPROTOCOL_INFOW WSAPROTOCOL_INFO; | |
1185 alias LPWSAPROTOCOL_INFOW LPWSAPROTOCOL_INFO; | |
1186 } else { | |
1187 alias WSAPROTOCOL_INFOA WSAPROTOCOL_INFO; | |
1188 alias LPWSAPROTOCOL_INFOA LPWSAPROTOCOL_INFO; | |
1189 } | |
1190 | |
1191 /* Needed for XP & .NET Server function WSANSPIoctl. */ | |
1192 enum WSACOMPLETIONTYPE { | |
1193 NSP_NOTIFY_IMMEDIATELY = 0, | |
1194 NSP_NOTIFY_HWND, | |
1195 NSP_NOTIFY_EVENT, | |
1196 NSP_NOTIFY_PORT, | |
1197 NSP_NOTIFY_APC | |
1198 } | |
1199 | |
1200 alias WSACOMPLETIONTYPE* PWSACOMPLETIONTYPE, LPWSACOMPLETIONTYPE; | |
1201 | |
1202 struct WSACOMPLETION { | |
1203 WSACOMPLETIONTYPE Type; | |
1204 union WSACOMPLETION_PARAMETERS { | |
1205 struct WSACOMPLETION_WINDOWMESSAGE { | |
1206 HWND hWnd; | |
1207 UINT uMsg; | |
1208 WPARAM context; | |
1209 } | |
1210 WSACOMPLETION_WINDOWMESSAGE WindowMessage; | |
1211 struct WSACOMPLETION_EVENT { | |
1212 LPWSAOVERLAPPED lpOverlapped; | |
1213 } | |
1214 WSACOMPLETION_EVENT Event; | |
1215 struct WSACOMPLETION_APC { | |
1216 LPWSAOVERLAPPED lpOverlapped; | |
1217 LPWSAOVERLAPPED_COMPLETION_ROUTINE lpfnCompletionProc; | |
1218 } | |
1219 WSACOMPLETION_APC Apc; | |
1220 struct WSACOMPLETION_PORT { | |
1221 LPWSAOVERLAPPED lpOverlapped; | |
1222 HANDLE hPort; | |
1223 ULONG_PTR Key; | |
1224 } | |
1225 WSACOMPLETION_PORT Port; | |
1226 } | |
1227 WSACOMPLETION_PARAMETERS Parameters; | |
1228 } | |
1229 | |
1230 alias WSACOMPLETION* PWSACOMPLETION, LPWSACOMPLETION; | |
1231 | |
1232 const int | |
1233 PFL_MULTIPLE_PROTO_ENTRIES = 0x00000001, | |
1234 PFL_RECOMMENDED_PROTO_ENTRY = 0x00000002, | |
1235 PFL_HIDDEN = 0x00000004, | |
1236 PFL_MATCHES_PROTOCOL_ZERO = 0x00000008; | |
1237 | |
1238 const int | |
1239 XP1_CONNECTIONLESS = 0x00000001, | |
1240 XP1_GUARANTEED_DELIVERY = 0x00000002, | |
1241 XP1_GUARANTEED_ORDER = 0x00000004, | |
1242 XP1_MESSAGE_ORIENTED = 0x00000008, | |
1243 XP1_PSEUDO_STREAM = 0x00000010, | |
1244 XP1_GRACEFUL_CLOSE = 0x00000020, | |
1245 XP1_EXPEDITED_DATA = 0x00000040, | |
1246 XP1_CONNECT_DATA = 0x00000080, | |
1247 XP1_DISCONNECT_DATA = 0x00000100, | |
1248 XP1_SUPPORT_BROADCAST = 0x00000200, | |
1249 XP1_SUPPORT_MULTIPOINT = 0x00000400, | |
1250 XP1_MULTIPOINT_CONTROL_PLANE = 0x00000800, | |
1251 XP1_MULTIPOINT_DATA_PLANE = 0x00001000, | |
1252 XP1_QOS_SUPPORTED = 0x00002000, | |
1253 XP1_INTERRUPT = 0x00004000, | |
1254 XP1_UNI_SEND = 0x00008000, | |
1255 XP1_UNI_RECV = 0x00010000, | |
1256 XP1_IFS_HANDLES = 0x00020000, | |
1257 XP1_PARTIAL_MESSAGE = 0x00040000; | |
1258 | |
1259 enum : int { | |
1260 BIGENDIAN = 0x0000, | |
1261 LITTLEENDIAN = 0x0001 | |
1262 } | |
1263 | |
1264 const SECURITY_PROTOCOL_NONE = 0x0000; | |
1265 | |
1266 const JL_SENDER_ONLY = 0x01; | |
1267 const JL_RECEIVER_ONLY = 0x02; | |
1268 const JL_BOTH = 0x04; | |
1269 | |
1270 const WSA_FLAG_OVERLAPPED = 0x01; | |
1271 const WSA_FLAG_MULTIPOINT_C_ROOT = 0x02; | |
1272 const WSA_FLAG_MULTIPOINT_C_LEAF = 0x04; | |
1273 const WSA_FLAG_MULTIPOINT_D_ROOT = 0x08; | |
1274 const WSA_FLAG_MULTIPOINT_D_LEAF = 0x10; | |
1275 | |
1276 const int IOC_UNIX = 0x00000000; | |
1277 const int IOC_WS2 = 0x08000000; | |
1278 const int IOC_PROTOCOL = 0x10000000; | |
1279 const int IOC_VENDOR = 0x18000000; | |
1280 | |
1281 template _WSAIO(int x, int y) { const int _WSAIO = IOC_VOID | x | y; } | |
1282 template _WSAIOR(int x, int y) { const int _WSAIOR = IOC_OUT | x | y; } | |
1283 template _WSAIOW(int x, int y) { const int _WSAIOW = IOC_IN | x | y; } | |
1284 template _WSAIORW(int x, int y) { const int _WSAIORW = IOC_INOUT | x | y; } | |
1285 | |
1286 const int SIO_ASSOCIATE_HANDLE = _WSAIOW!(IOC_WS2,1); | |
1287 const int SIO_ENABLE_CIRCULAR_QUEUEING = _WSAIO!(IOC_WS2,2); | |
1288 const int SIO_FIND_ROUTE = _WSAIOR!(IOC_WS2,3); | |
1289 const int SIO_FLUSH = _WSAIO!(IOC_WS2,4); | |
1290 const int SIO_GET_BROADCAST_ADDRESS = _WSAIOR!(IOC_WS2,5); | |
1291 const int SIO_GET_EXTENSION_FUNCTION_POINTER = _WSAIORW!(IOC_WS2,6); | |
1292 const int SIO_GET_QOS = _WSAIORW!(IOC_WS2,7); | |
1293 const int SIO_GET_GROUP_QOS = _WSAIORW!(IOC_WS2,8); | |
1294 const int SIO_MULTIPOINT_LOOPBACK = _WSAIOW!(IOC_WS2,9); | |
1295 const int SIO_MULTICAST_SCOPE = _WSAIOW!(IOC_WS2,10); | |
1296 const int SIO_SET_QOS = _WSAIOW!(IOC_WS2,11); | |
1297 const int SIO_SET_GROUP_QOS = _WSAIOW!(IOC_WS2,12); | |
1298 const int SIO_TRANSLATE_HANDLE = _WSAIORW!(IOC_WS2,13); | |
1299 const int SIO_ROUTING_INTERFACE_QUERY = _WSAIORW!(IOC_WS2,20); | |
1300 const int SIO_ROUTING_INTERFACE_CHANGE = _WSAIOW!(IOC_WS2,21); | |
1301 const int SIO_ADDRESS_LIST_QUERY = _WSAIOR!(IOC_WS2,22); | |
1302 const int SIO_ADDRESS_LIST_CHANGE = _WSAIO!(IOC_WS2,23); | |
1303 const int SIO_QUERY_TARGET_PNP_HANDLE = _WSAIOR!(IOC_WS2,24); | |
1304 const int SIO_NSP_NOTIFY_CHANGE = _WSAIOW!(IOC_WS2,25); | |
1305 | |
1306 const int TH_NETDEV = 1; | |
1307 const int TH_TAPI = 2; | |
1308 | |
1309 | |
1310 extern(Windows) { | |
1311 SOCKET WSAAccept(SOCKET, SOCKADDR*, LPINT, LPCONDITIONPROC, DWORD); | |
1312 INT WSAAddressToStringA(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOA, LPSTR, LPDWORD); | |
1313 INT WSAAddressToStringW(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOW, LPWSTR, LPDWORD); | |
1314 BOOL WSACloseEvent(WSAEVENT); | |
1315 int WSAConnect(SOCKET, SOCKADDR*, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS); | |
1316 WSAEVENT WSACreateEvent(); | |
1317 int WSADuplicateSocketA(SOCKET, DWORD, LPWSAPROTOCOL_INFOA); | |
1318 int WSADuplicateSocketW(SOCKET, DWORD, LPWSAPROTOCOL_INFOW); | |
1319 INT WSAEnumNameSpaceProvidersA(LPDWORD, LPWSANAMESPACE_INFOA); | |
1320 INT WSAEnumNameSpaceProvidersW(LPDWORD, LPWSANAMESPACE_INFOW); | |
1321 int WSAEnumNetworkEvents(SOCKET, WSAEVENT, LPWSANETWORKEVENTS); | |
1322 int WSAEnumProtocolsA(LPINT, LPWSAPROTOCOL_INFOA, LPDWORD); | |
1323 int WSAEnumProtocolsW(LPINT, LPWSAPROTOCOL_INFOW, LPDWORD); | |
1324 int WSAEventSelect(SOCKET, WSAEVENT, int); | |
1325 BOOL WSAGetOverlappedResult(SOCKET, LPWSAOVERLAPPED, LPDWORD, BOOL, LPDWORD); | |
1326 BOOL WSAGetQOSByName(SOCKET, LPWSABUF, LPQOS); | |
1327 INT WSAGetServiceClassInfoA(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOA); | |
1328 INT WSAGetServiceClassInfoW(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOW); | |
1329 INT WSAGetServiceClassNameByClassIdA(LPGUID, LPSTR, LPDWORD); | |
1330 INT WSAGetServiceClassNameByClassIdW(LPGUID, LPWSTR, LPDWORD); | |
1331 int WSAHtonl(SOCKET, uint, uint*); | |
1332 int WSAHtons(SOCKET, ushort, ushort*); | |
1333 INT WSAInstallServiceClassA(LPWSASERVICECLASSINFOA); | |
1334 INT WSAInstallServiceClassW(LPWSASERVICECLASSINFOW); | |
1335 int WSAIoctl(SOCKET, DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); | |
1336 SOCKET WSAJoinLeaf(SOCKET, SOCKADDR*, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS, DWORD); | |
1337 INT WSALookupServiceBeginA(LPWSAQUERYSETA, DWORD, LPHANDLE); | |
1338 INT WSALookupServiceBeginW(LPWSAQUERYSETW lpqsRestrictions, DWORD, LPHANDLE); | |
1339 INT WSALookupServiceNextA(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETA); | |
1340 INT WSALookupServiceNextW(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETW); | |
1341 INT WSALookupServiceEnd(HANDLE); | |
1342 int WSANSPIoctl(HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSACOMPLETION); /* XP or .NET Server */ | |
1343 int WSANtohl(SOCKET, uint, uint*); | |
1344 int WSANtohs(SOCKET, ushort, ushort*); | |
1345 int WSARecv(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); | |
1346 int WSARecvDisconnect(SOCKET, LPWSABUF); | |
1347 int WSARecvFrom(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, SOCKADDR*, LPINT, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); | |
1348 INT WSARemoveServiceClass(LPGUID); | |
1349 BOOL WSAResetEvent(WSAEVENT); | |
1350 int WSASend(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); | |
1351 int WSASendDisconnect(SOCKET, LPWSABUF); | |
1352 int WSASendTo(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, SOCKADDR*, int, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); | |
1353 BOOL WSASetEvent(WSAEVENT); | |
1354 INT WSASetServiceA(LPWSAQUERYSETA, WSAESETSERVICEOP, DWORD); // NB: was declared with "WSAAPI" linkage | |
1355 INT WSASetServiceW(LPWSAQUERYSETW, WSAESETSERVICEOP, DWORD); | |
1356 SOCKET WSASocketA(int, int, int, LPWSAPROTOCOL_INFOA, GROUP, DWORD); | |
1357 SOCKET WSASocketW(int, int, int, LPWSAPROTOCOL_INFOW, GROUP, DWORD); | |
1358 INT WSAStringToAddressA(LPSTR, INT, LPWSAPROTOCOL_INFOA, LPSOCKADDR, LPINT); | |
1359 INT WSAStringToAddressW(LPWSTR, INT, LPWSAPROTOCOL_INFOW, LPSOCKADDR, LPINT); | |
1360 DWORD WSAWaitForMultipleEvents(DWORD, WSAEVENT*, BOOL, DWORD, BOOL); | |
1361 | |
1362 alias typeof(&WSAAccept) LPFN_WSAACCEPT; | |
1363 alias typeof(&WSAAddressToStringA) LPFN_WSAADDRESSTOSTRINGA; | |
1364 alias typeof(&WSAAddressToStringW) LPFN_WSAADDRESSTOSTRINGW; | |
1365 alias typeof(&WSACloseEvent) LPFN_WSACLOSEEVENT; | |
1366 alias typeof(&WSAConnect) LPFN_WSACONNECT; | |
1367 alias typeof(&WSACreateEvent) LPFN_WSACREATEEVENT; | |
1368 alias typeof(&WSADuplicateSocketA) LPFN_WSADUPLICATESOCKETA; | |
1369 alias typeof(&WSADuplicateSocketW) LPFN_WSADUPLICATESOCKETW; | |
1370 alias typeof(&WSAEnumNameSpaceProvidersA) LPFN_WSAENUMNAMESPACEPROVIDERSA; | |
1371 alias typeof(&WSAEnumNameSpaceProvidersW) LPFN_WSAENUMNAMESPACEPROVIDERSW; | |
1372 alias typeof(&WSAEnumNetworkEvents) LPFN_WSAENUMNETWORKEVENTS; | |
1373 alias typeof(&WSAEnumProtocolsA) LPFN_WSAENUMPROTOCOLSA; | |
1374 alias typeof(&WSAEnumProtocolsW) LPFN_WSAENUMPROTOCOLSW; | |
1375 alias typeof(&WSAEventSelect) LPFN_WSAEVENTSELECT; | |
1376 alias typeof(&WSAGetOverlappedResult) LPFN_WSAGETOVERLAPPEDRESULT; | |
1377 alias typeof(&WSAGetQOSByName) LPFN_WSAGETQOSBYNAME; | |
1378 alias typeof(&WSAGetServiceClassInfoA) LPFN_WSAGETSERVICECLASSINFOA; | |
1379 alias typeof(&WSAGetServiceClassInfoW) LPFN_WSAGETSERVICECLASSINFOW; | |
1380 alias typeof(&WSAGetServiceClassNameByClassIdA) LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA; | |
1381 alias typeof(&WSAGetServiceClassNameByClassIdW) LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW; | |
1382 alias typeof(&WSAHtonl) LPFN_WSAHTONL; | |
1383 alias typeof(&WSAHtons) LPFN_WSAHTONS; | |
1384 alias typeof(&WSAInstallServiceClassA) LPFN_WSAINSTALLSERVICECLASSA; | |
1385 alias typeof(&WSAInstallServiceClassW) LPFN_WSAINSTALLSERVICECLASSW; | |
1386 alias typeof(&WSAIoctl) LPFN_WSAIOCTL; | |
1387 alias typeof(&WSAJoinLeaf) LPFN_WSAJOINLEAF; | |
1388 alias typeof(&WSALookupServiceBeginA) LPFN_WSALOOKUPSERVICEBEGINA; | |
1389 alias typeof(&WSALookupServiceBeginW) LPFN_WSALOOKUPSERVICEBEGINW; | |
1390 alias typeof(&WSALookupServiceNextA) LPFN_WSALOOKUPSERVICENEXTA; | |
1391 alias typeof(&WSALookupServiceNextW) LPFN_WSALOOKUPSERVICENEXTW; | |
1392 alias typeof(&WSALookupServiceEnd) LPFN_WSALOOKUPSERVICEEND; | |
1393 alias typeof(&WSANSPIoctl) LPFN_WSANSPIoctl; | |
1394 alias typeof(&WSANtohl) LPFN_WSANTOHL; | |
1395 alias typeof(&WSANtohs) LPFN_WSANTOHS; | |
1396 alias typeof(&WSARecv) LPFN_WSARECV; | |
1397 alias typeof(&WSARecvDisconnect) LPFN_WSARECVDISCONNECT; | |
1398 alias typeof(&WSARecvFrom) LPFN_WSARECVFROM; | |
1399 alias typeof(&WSARemoveServiceClass) LPFN_WSAREMOVESERVICECLASS; | |
1400 alias typeof(&WSAResetEvent) LPFN_WSARESETEVENT; | |
1401 alias typeof(&WSASend) LPFN_WSASEND; | |
1402 alias typeof(&WSASendDisconnect) LPFN_WSASENDDISCONNECT; | |
1403 alias typeof(&WSASendTo) LPFN_WSASENDTO; | |
1404 alias typeof(&WSASetEvent) LPFN_WSASETEVENT; | |
1405 alias typeof(&WSASetServiceA) LPFN_WSASETSERVICEA; | |
1406 alias typeof(&WSASetServiceW) LPFN_WSASETSERVICEW; | |
1407 alias typeof(&WSASocketA) LPFN_WSASOCKETA; | |
1408 alias typeof(&WSASocketW) LPFN_WSASOCKETW; | |
1409 alias typeof(&WSAStringToAddressA) LPFN_WSASTRINGTOADDRESSA; | |
1410 alias typeof(&WSAStringToAddressW) LPFN_WSASTRINGTOADDRESSW; | |
1411 alias typeof(&WSAWaitForMultipleEvents) LPFN_WSAWAITFORMULTIPLEEVENTS; | |
1412 } | |
1413 | |
1414 version(Unicode) { | |
1415 alias LPFN_WSAADDRESSTOSTRINGW LPFN_WSAADDRESSTOSTRING; | |
1416 alias LPFN_WSADUPLICATESOCKETW LPFN_WSADUPLICATESOCKET; | |
1417 alias LPFN_WSAENUMNAMESPACEPROVIDERSW LPFN_WSAENUMNAMESPACEPROVIDERS; | |
1418 alias LPFN_WSAENUMPROTOCOLSW LPFN_WSAENUMPROTOCOLS; | |
1419 alias LPFN_WSAGETSERVICECLASSINFOW LPFN_WSAGETSERVICECLASSINFO; | |
1420 alias LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW LPFN_WSAGETSERVICECLASSNAMEBYCLASSID; | |
1421 alias LPFN_WSAINSTALLSERVICECLASSW LPFN_WSAINSTALLSERVICECLASS; | |
1422 alias LPFN_WSALOOKUPSERVICEBEGINW LPFN_WSALOOKUPSERVICEBEGIN; | |
1423 alias LPFN_WSALOOKUPSERVICENEXTW LPFN_WSALOOKUPSERVICENEXT; | |
1424 alias LPFN_WSASETSERVICEW LPFN_WSASETSERVICE; | |
1425 alias LPFN_WSASOCKETW LPFN_WSASOCKET; | |
1426 alias LPFN_WSASTRINGTOADDRESSW LPFN_WSASTRINGTOADDRESS; | |
1427 alias WSAAddressToStringW WSAAddressToString; | |
1428 alias WSADuplicateSocketW WSADuplicateSocket; | |
1429 alias WSAEnumNameSpaceProvidersW WSAEnumNameSpaceProviders; | |
1430 alias WSAEnumProtocolsW WSAEnumProtocols; | |
1431 alias WSAGetServiceClassInfoW WSAGetServiceClassInfo; | |
1432 alias WSAGetServiceClassNameByClassIdW WSAGetServiceClassNameByClassId; | |
1433 alias WSASetServiceW WSASetService; | |
1434 alias WSASocketW WSASocket; | |
1435 alias WSAStringToAddressW WSAStringToAddress; | |
1436 alias WSALookupServiceBeginW WSALookupServiceBegin; | |
1437 alias WSALookupServiceNextW WSALookupServiceNext; | |
1438 alias WSAInstallServiceClassW WSAInstallServiceClass; | |
1439 } else { | |
1440 alias LPFN_WSAADDRESSTOSTRINGA LPFN_WSAADDRESSTOSTRING; | |
1441 alias LPFN_WSADUPLICATESOCKETW LPFN_WSADUPLICATESOCKET; | |
1442 alias LPFN_WSAENUMNAMESPACEPROVIDERSA LPFN_WSAENUMNAMESPACEPROVIDERS; | |
1443 alias LPFN_WSAENUMPROTOCOLSA LPFN_WSAENUMPROTOCOLS; | |
1444 alias LPFN_WSAGETSERVICECLASSINFOA LPFN_WSAGETSERVICECLASSINFO; | |
1445 alias LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA LPFN_WSAGETSERVICECLASSNAMEBYCLASSID; | |
1446 alias LPFN_WSAINSTALLSERVICECLASSA LPFN_WSAINSTALLSERVICECLASS; | |
1447 alias LPFN_WSALOOKUPSERVICEBEGINA LPFN_WSALOOKUPSERVICEBEGIN; | |
1448 alias LPFN_WSALOOKUPSERVICENEXTA LPFN_WSALOOKUPSERVICENEXT; | |
1449 alias LPFN_WSASETSERVICEA LPFN_WSASETSERVICE; | |
1450 alias LPFN_WSASOCKETA LPFN_WSASOCKET; | |
1451 alias LPFN_WSASTRINGTOADDRESSA LPFN_WSASTRINGTOADDRESS; | |
1452 alias WSAAddressToStringA WSAAddressToString; | |
1453 alias WSADuplicateSocketA WSADuplicateSocket; | |
1454 alias WSAEnumNameSpaceProvidersA WSAEnumNameSpaceProviders; | |
1455 alias WSAEnumProtocolsA WSAEnumProtocols; | |
1456 alias WSAGetServiceClassInfoA WSAGetServiceClassInfo; | |
1457 alias WSAGetServiceClassNameByClassIdA WSAGetServiceClassNameByClassId; | |
1458 alias WSAInstallServiceClassA WSAInstallServiceClass; | |
1459 alias WSALookupServiceBeginA WSALookupServiceBegin; | |
1460 alias WSALookupServiceNextA WSALookupServiceNext; | |
1461 alias WSASocketA WSASocket; | |
1462 alias WSAStringToAddressA WSAStringToAddress; | |
1463 alias WSASetServiceA WSASetService; | |
1464 } |