1
|
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 }
|