Mercurial > projects > ddbg_continued
comparison win32/winsock.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 * winsock.d * | |
3 * * | |
4 * Windows API header module * | |
5 * * | |
6 * Translated from MinGW Windows headers * | |
7 * by Stewart Gordon * | |
8 \***********************************************************************/ | |
9 module win32.winsock; | |
10 | |
11 /* | |
12 Definitions for winsock 1.1 | |
13 | |
14 Portions Copyright (c) 1980, 1983, 1988, 1993 | |
15 The Regents of the University of California. All rights reserved. | |
16 | |
17 Portions Copyright (c) 1993 by Digital Equipment Corporation. | |
18 */ | |
19 | |
20 /* DRK: This module should not be included if -version=Win32_Winsock2 has | |
21 * been set. If it has, assert. I think it's better that way than letting | |
22 * the user believe that it's worked. | |
23 * | |
24 * SG: It has now been changed so that winsock2 is the default, and | |
25 * -version=Win32_Winsock1 must be set to use winsock. | |
26 */ | |
27 version(Win32_Winsock1) {} | |
28 else { | |
29 pragma(msg, "Cannot use win32.winsock without " | |
30 ~ "Win32_Winsock1 defined."); | |
31 static assert(false); | |
32 } | |
33 | |
34 import win32.windef; | |
35 | |
36 alias char u_char; | |
37 alias ushort u_short; | |
38 alias uint u_int, u_long, SOCKET; | |
39 | |
40 const size_t FD_SETSIZE = 64; | |
41 | |
42 // shutdown() how types | |
43 enum : int { | |
44 SD_RECEIVE, | |
45 SD_SEND, | |
46 SD_BOTH | |
47 } | |
48 | |
49 struct FD_SET { | |
50 u_int fd_count; | |
51 SOCKET[FD_SETSIZE] fd_array; | |
52 | |
53 static void opCall(SOCKET fd, FD_SET* set) { | |
54 if (set.fd_count < FD_SETSIZE) set.fd_array[set.fd_count++] = fd; | |
55 } | |
56 } | |
57 alias FD_SET* PFD_SET, LPFD_SET; | |
58 | |
59 extern(Pascal) int __WSAFDIsSet(SOCKET, FD_SET*); | |
60 alias __WSAFDIsSet FD_ISSET; | |
61 | |
62 void FD_CLR(SOCKET fd, FD_SET* set) { | |
63 for (u_int i = 0; i < set.fd_count; i++) { | |
64 if (set.fd_array[i] == fd) { | |
65 while (i < set.fd_count - 1) { | |
66 set.fd_array[i] = set.fd_array[i+1]; | |
67 i++; | |
68 } | |
69 set.fd_count--; | |
70 break; | |
71 } | |
72 } | |
73 } | |
74 | |
75 /+void FD_SET(SOCKET fd, FD_SET* set) { | |
76 if (set.fd_count < FD_SETSIZE) set.fd_array[set.fd_count++] = fd; | |
77 }+/ | |
78 | |
79 void FD_ZERO(FD_SET* set) { | |
80 set.fd_count = 0; | |
81 } | |
82 | |
83 | |
84 struct TIMEVAL { | |
85 int tv_sec; | |
86 int tv_usec; | |
87 | |
88 int opCmp(TIMEVAL tv) { | |
89 if (tv_sec < tv.tv_sec) return -1; | |
90 if (tv_sec > tv.tv_sec) return 1; | |
91 if (tv_usec < tv.tv_usec) return -1; | |
92 if (tv_usec > tv.tv_usec) return 1; | |
93 return 0; | |
94 } | |
95 } | |
96 alias TIMEVAL* PTIMEVAL, LPTIMEVAL; | |
97 | |
98 bool timerisset(TIMEVAL tvp) { | |
99 return tvp.tv_sec || tvp.tv_usec; | |
100 } | |
101 | |
102 void timerclear(inout TIMEVAL tvp) { | |
103 tvp.tv_sec = tvp.tv_usec = 0; | |
104 } | |
105 | |
106 struct HOSTENT { | |
107 char* h_name; | |
108 char** h_aliases; | |
109 short h_addrtype; | |
110 short h_length; | |
111 char** h_addr_list; | |
112 | |
113 char* h_addr() { return h_addr_list[0]; } | |
114 char* h_addr(char* h) { return h_addr_list[0] = h; } | |
115 } | |
116 alias HOSTENT* PHOSTENT, LPHOSTENT; | |
117 | |
118 struct LINGER { | |
119 u_short l_onoff; | |
120 u_short l_linger; | |
121 } | |
122 alias LINGER* PLINGER, LPLINGER; | |
123 | |
124 // TOTHINKABOUT: do we need these, or are they just for internal use? | |
125 /+ | |
126 #define IOCPARM_MASK 0x7f | |
127 #define IOC_VOID 0x20000000 | |
128 #define IOC_OUT 0x40000000 | |
129 #define IOC_IN 0x80000000 | |
130 #define IOC_INOUT (IOC_IN|IOC_OUT) | |
131 | |
132 #define _IO(x,y) (IOC_VOID|((x)<<8)|(y)) | |
133 #define _IOR(x,y,t) (IOC_OUT|(((int)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) | |
134 #define _IOW(x,y,t) (IOC_IN|(((int)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) | |
135 | |
136 #define FIONBIO _IOW('f', 126, u_long) | |
137 #define FIONREAD _IOR('f', 127, u_long) | |
138 #define FIOASYNC _IOW('f', 125, u_long) | |
139 #define SIOCSHIWAT _IOW('s', 0, u_long) | |
140 #define SIOCGHIWAT _IOR('s', 1, u_long) | |
141 #define SIOCSLOWAT _IOW('s', 2, u_long) | |
142 #define SIOCGLOWAT _IOR('s', 3, u_long) | |
143 #define SIOCATMARK _IOR('s', 7, u_long) | |
144 +/ | |
145 | |
146 enum : DWORD { | |
147 FIONBIO = 0x8004667E, | |
148 FIONREAD = 0x4004667F, | |
149 FIOASYNC = 0x8004667D, | |
150 SIOCSHIWAT = 0x80047300, | |
151 SIOCGHIWAT = 0x40047301, | |
152 SIOCSLOWAT = 0x80047302, | |
153 SIOCGLOWAT = 0x40047303, | |
154 SIOCATMARK = 0x40047307 | |
155 } | |
156 | |
157 struct netent { | |
158 char* n_name; | |
159 char** n_aliases; | |
160 short n_addrtype; | |
161 u_long n_net; | |
162 } | |
163 | |
164 struct SERVENT { | |
165 char* s_name; | |
166 char** s_aliases; | |
167 short s_port; | |
168 char* s_proto; | |
169 } | |
170 alias SERVENT* PSERVENT, LPSERVENT; | |
171 | |
172 struct PROTOENT { | |
173 char* p_name; | |
174 char** p_aliases; | |
175 short p_proto; | |
176 } | |
177 alias PROTOENT* PPROTOENT, LPPROTOENT; | |
178 | |
179 enum : int { | |
180 IPPROTO_IP = 0, | |
181 IPPROTO_ICMP = 1, | |
182 IPPROTO_IGMP = 2, | |
183 IPPROTO_GGP = 3, | |
184 IPPROTO_TCP = 6, | |
185 IPPROTO_PUP = 12, | |
186 IPPROTO_UDP = 17, | |
187 IPPROTO_IDP = 22, | |
188 IPPROTO_ND = 77, | |
189 IPPROTO_RAW = 255, | |
190 IPPROTO_MAX = 256 | |
191 } | |
192 | |
193 // These are not documented on the MSDN site | |
194 enum { | |
195 IPPORT_ECHO = 7, | |
196 IPPORT_DISCARD = 9, | |
197 IPPORT_SYSTAT = 11, | |
198 IPPORT_DAYTIME = 13, | |
199 IPPORT_NETSTAT = 15, | |
200 IPPORT_FTP = 21, | |
201 IPPORT_TELNET = 23, | |
202 IPPORT_SMTP = 25, | |
203 IPPORT_TIMESERVER = 37, | |
204 IPPORT_NAMESERVER = 42, | |
205 IPPORT_WHOIS = 43, | |
206 IPPORT_MTP = 57, | |
207 IPPORT_TFTP = 69, | |
208 IPPORT_RJE = 77, | |
209 IPPORT_FINGER = 79, | |
210 IPPORT_TTYLINK = 87, | |
211 IPPORT_SUPDUP = 95, | |
212 IPPORT_EXECSERVER = 512, | |
213 IPPORT_LOGINSERVER = 513, | |
214 IPPORT_CMDSERVER = 514, | |
215 IPPORT_EFSSERVER = 520, | |
216 IPPORT_BIFFUDP = 512, | |
217 IPPORT_WHOSERVER = 513, | |
218 IPPORT_ROUTESERVER = 520, | |
219 IPPORT_RESERVED = 1024 | |
220 } | |
221 | |
222 // These are not documented on the MSDN site | |
223 enum { | |
224 IMPLINK_IP = 155, | |
225 IMPLINK_LOWEXPER = 156, | |
226 IMPLINK_HIGHEXPER = 158 | |
227 } | |
228 | |
229 struct IN_ADDR { | |
230 union { | |
231 struct { u_char s_net, s_host, s_lh, s_impno; } | |
232 struct { u_short s_w1, s_imp; } | |
233 u_long s_addr; | |
234 } | |
235 } | |
236 alias IN_ADDR* PIN_ADDR, LPIN_ADDR; | |
237 | |
238 // IN_CLASSx are not used anywhere or documented on MSDN. | |
239 bool IN_CLASSA(int i) { | |
240 return (i & 0x80000000) == 0; | |
241 } | |
242 | |
243 const IN_CLASSA_NET = 0xff000000; | |
244 const IN_CLASSA_NSHIFT = 24; | |
245 const IN_CLASSA_HOST = 0x00ffffff; | |
246 const IN_CLASSA_MAX = 128; | |
247 | |
248 bool IN_CLASSB(int i) { | |
249 return (i & 0xC0000000) == 0x80000000; | |
250 } | |
251 | |
252 const IN_CLASSB_NET = 0xffff0000; | |
253 const IN_CLASSB_NSHIFT = 16; | |
254 const IN_CLASSB_HOST = 0x0000ffff; | |
255 const IN_CLASSB_MAX = 65536; | |
256 | |
257 bool IN_CLASSC(int i) { | |
258 return (i & 0xE0000000) == 0xC0000000; | |
259 } | |
260 | |
261 const IN_CLASSC_NET = 0xffffff00; | |
262 const IN_CLASSC_NSHIFT = 8; | |
263 const IN_CLASSC_HOST = 0x000000ff; | |
264 | |
265 const u_long | |
266 INADDR_ANY = 0, | |
267 INADDR_LOOPBACK = 0x7F000001, | |
268 INADDR_BROADCAST = 0xFFFFFFFF, | |
269 INADDR_NONE = 0xFFFFFFFF; | |
270 | |
271 struct SOCKADDR_IN { | |
272 short sin_family; | |
273 u_short sin_port; | |
274 IN_ADDR sin_addr; | |
275 char[8] sin_zero; | |
276 } | |
277 alias SOCKADDR_IN* PSOCKADDR_IN, LPSOCKADDR_IN; | |
278 | |
279 const size_t | |
280 WSADESCRIPTION_LEN = 256, | |
281 WSASYS_STATUS_LEN = 128; | |
282 | |
283 struct WSADATA { | |
284 WORD wVersion; | |
285 WORD wHighVersion; | |
286 char[WSADESCRIPTION_LEN+1] szDescription; | |
287 char[WSASYS_STATUS_LEN+1] szSystemStatus; | |
288 ushort iMaxSockets; | |
289 ushort iMaxUdpDg; | |
290 char* lpVendorInfo; | |
291 } | |
292 alias WSADATA* LPWSADATA; | |
293 | |
294 // This is not documented on the MSDN site | |
295 const IP_OPTIONS = 1; | |
296 | |
297 const int | |
298 SO_DEBUG = 1, | |
299 SO_ACCEPTCONN = 2, | |
300 SO_REUSEADDR = 4, | |
301 SO_KEEPALIVE = 8, | |
302 SO_DONTROUTE = 16, | |
303 SO_BROADCAST = 32, | |
304 SO_USELOOPBACK = 64, | |
305 SO_LINGER = 128, | |
306 SO_OOBINLINE = 256, | |
307 SO_DONTLINGER = ~SO_LINGER; | |
308 | |
309 enum : int { | |
310 SO_SNDBUF = 0x1001, | |
311 SO_RCVBUF, | |
312 SO_SNDLOWAT, | |
313 SO_RCVLOWAT, | |
314 SO_SNDTIMEO, | |
315 SO_RCVTIMEO, | |
316 SO_ERROR, | |
317 SO_TYPE // = 0x1008 | |
318 } | |
319 | |
320 /* | |
321 * Note that the next 5 IP defines are specific to WinSock 1.1 (wsock32.dll). | |
322 * They will cause errors or unexpected results if used with the | |
323 * (gs)etsockopts exported from the WinSock 2 lib, ws2_32.dll. Refer ws2tcpip.h. | |
324 */ | |
325 enum : int { | |
326 IP_MULTICAST_IF = 2, | |
327 IP_MULTICAST_TTL, | |
328 IP_MULTICAST_LOOP, | |
329 IP_ADD_MEMBERSHIP, | |
330 IP_DROP_MEMBERSHIP | |
331 } | |
332 | |
333 // These are not documented on the MSDN site | |
334 const IP_DEFAULT_MULTICAST_TTL = 1; | |
335 const IP_DEFAULT_MULTICAST_LOOP = 1; | |
336 const IP_MAX_MEMBERSHIPS = 20; | |
337 | |
338 struct ip_mreq { | |
339 IN_ADDR imr_multiaddr; | |
340 IN_ADDR imr_interface; | |
341 } | |
342 | |
343 const SOCKET INVALID_SOCKET = uint.max; | |
344 const int SOCKET_ERROR = -1; | |
345 | |
346 enum : int { | |
347 SOCK_STREAM = 1, | |
348 SOCK_DGRAM, | |
349 SOCK_RAW, | |
350 SOCK_RDM, | |
351 SOCK_SEQPACKET | |
352 } | |
353 | |
354 const int TCP_NODELAY = 1; | |
355 | |
356 enum : int { | |
357 AF_UNSPEC, | |
358 AF_UNIX, | |
359 AF_INET, | |
360 AF_IMPLINK, | |
361 AF_PUP, | |
362 AF_CHAOS, | |
363 AF_IPX, // = 6 | |
364 AF_NS = 6, | |
365 AF_ISO, | |
366 AF_OSI = AF_ISO, | |
367 AF_ECMA, | |
368 AF_DATAKIT, | |
369 AF_CCITT, | |
370 AF_SNA, | |
371 AF_DECnet, | |
372 AF_DLI, | |
373 AF_LAT, | |
374 AF_HYLINK, | |
375 AF_APPLETALK, | |
376 AF_NETBIOS, | |
377 AF_VOICEVIEW, | |
378 AF_FIREFOX, | |
379 AF_UNKNOWN1, | |
380 AF_BAN, | |
381 AF_ATM, | |
382 AF_INET6, | |
383 AF_MAX // = 24 | |
384 } | |
385 | |
386 struct SOCKADDR { | |
387 u_short sa_family; | |
388 char[14] sa_data; | |
389 } | |
390 alias SOCKADDR* PSOCKADDR, LPSOCKADDR; | |
391 | |
392 struct sockproto { | |
393 u_short sp_family; | |
394 u_short sp_protocol; | |
395 } | |
396 | |
397 enum : int { | |
398 PF_UNSPEC = AF_UNSPEC, | |
399 PF_UNIX = AF_UNIX, | |
400 PF_INET = AF_INET, | |
401 PF_IMPLINK = AF_IMPLINK, | |
402 PF_PUP = AF_PUP, | |
403 PF_CHAOS = AF_CHAOS, | |
404 PF_NS = AF_NS, | |
405 PF_IPX = AF_IPX, | |
406 PF_ISO = AF_ISO, | |
407 PF_OSI = AF_OSI, | |
408 PF_ECMA = AF_ECMA, | |
409 PF_DATAKIT = AF_DATAKIT, | |
410 PF_CCITT = AF_CCITT, | |
411 PF_SNA = AF_SNA, | |
412 PF_DECnet = AF_DECnet, | |
413 PF_DLI = AF_DLI, | |
414 PF_LAT = AF_LAT, | |
415 PF_HYLINK = AF_HYLINK, | |
416 PF_APPLETALK = AF_APPLETALK, | |
417 PF_VOICEVIEW = AF_VOICEVIEW, | |
418 PF_FIREFOX = AF_FIREFOX, | |
419 PF_UNKNOWN1 = AF_UNKNOWN1, | |
420 PF_BAN = AF_BAN, | |
421 PF_ATM = AF_ATM, | |
422 PF_INET6 = AF_INET6, | |
423 PF_MAX = AF_MAX | |
424 } | |
425 | |
426 const int SOL_SOCKET = 0xFFFF; | |
427 | |
428 const int SOMAXCONN = 5; | |
429 | |
430 const int | |
431 MSG_OOB = 1, | |
432 MSG_PEEK = 2, | |
433 MSG_DONTROUTE = 4, | |
434 MSG_MAXIOVLEN = 16, | |
435 MSG_PARTIAL = 0x8000; | |
436 | |
437 const size_t MAXGETHOSTSTRUCT = 1024; | |
438 | |
439 const int | |
440 FD_READ = 1, | |
441 FD_WRITE = 2, | |
442 FD_OOB = 4, | |
443 FD_ACCEPT = 8, | |
444 FD_CONNECT = 16, | |
445 FD_CLOSE = 32; | |
446 | |
447 enum : int { | |
448 WSABASEERR = 10000, | |
449 WSAEINTR = 10004, | |
450 WSAEBADF = 10009, | |
451 WSAEACCES = 10013, | |
452 WSAEFAULT = 10014, | |
453 WSAEINVAL = 10022, | |
454 WSAEMFILE = 10024, | |
455 WSAEWOULDBLOCK = 10035, | |
456 WSAEINPROGRESS = 10036, | |
457 WSAEALREADY = 10037, | |
458 WSAENOTSOCK = 10038, | |
459 WSAEDESTADDRREQ = 10039, | |
460 WSAEMSGSIZE = 10040, | |
461 WSAEPROTOTYPE = 10041, | |
462 WSAENOPROTOOPT = 10042, | |
463 WSAEPROTONOSUPPORT = 10043, | |
464 WSAESOCKTNOSUPPORT = 10044, | |
465 WSAEOPNOTSUPP = 10045, | |
466 WSAEPFNOSUPPORT = 10046, | |
467 WSAEAFNOSUPPORT = 10047, | |
468 WSAEADDRINUSE = 10048, | |
469 WSAEADDRNOTAVAIL = 10049, | |
470 WSAENETDOWN = 10050, | |
471 WSAENETUNREACH = 10051, | |
472 WSAENETRESET = 10052, | |
473 WSAECONNABORTED = 10053, | |
474 WSAECONNRESET = 10054, | |
475 WSAENOBUFS = 10055, | |
476 WSAEISCONN = 10056, | |
477 WSAENOTCONN = 10057, | |
478 WSAESHUTDOWN = 10058, | |
479 WSAETOOMANYREFS = 10059, | |
480 WSAETIMEDOUT = 10060, | |
481 WSAECONNREFUSED = 10061, | |
482 WSAELOOP = 10062, | |
483 WSAENAMETOOLONG = 10063, | |
484 WSAEHOSTDOWN = 10064, | |
485 WSAEHOSTUNREACH = 10065, | |
486 WSAENOTEMPTY = 10066, | |
487 WSAEPROCLIM = 10067, | |
488 WSAEUSERS = 10068, | |
489 WSAEDQUOT = 10069, | |
490 WSAESTALE = 10070, | |
491 WSAEREMOTE = 10071, | |
492 WSAEDISCON = 10101, | |
493 WSASYSNOTREADY = 10091, | |
494 WSAVERNOTSUPPORTED = 10092, | |
495 WSANOTINITIALISED = 10093, | |
496 WSAHOST_NOT_FOUND = 11001, | |
497 WSATRY_AGAIN = 11002, | |
498 WSANO_RECOVERY = 11003, | |
499 WSANO_DATA = 11004, | |
500 WSANO_ADDRESS = WSANO_DATA | |
501 } | |
502 | |
503 alias WSAGetLastError h_errno; | |
504 | |
505 enum : int { | |
506 HOST_NOT_FOUND = WSAHOST_NOT_FOUND, | |
507 TRY_AGAIN = WSATRY_AGAIN, | |
508 NO_RECOVERY = WSANO_RECOVERY, | |
509 NO_DATA = WSANO_DATA, | |
510 NO_ADDRESS = WSANO_ADDRESS | |
511 } | |
512 | |
513 extern (Pascal) { | |
514 SOCKET accept(SOCKET, SOCKADDR*, int*); | |
515 int bind(SOCKET, SOCKADDR*, int); | |
516 int closesocket(SOCKET); | |
517 int connect(SOCKET, SOCKADDR*, int); | |
518 int ioctlsocket(SOCKET, int, u_long*); | |
519 int getpeername(SOCKET, SOCKADDR*, int*); | |
520 int getsockname(SOCKET, SOCKADDR*, int*); | |
521 int getsockopt(SOCKET, int, int, char*, int*); | |
522 uint inet_addr(char*); | |
523 int listen(SOCKET, int); | |
524 int recv(SOCKET, char*, int, int); | |
525 int recvfrom(SOCKET, char*, int, int, SOCKADDR*, int*); | |
526 int send(SOCKET, char*, int, int); | |
527 int sendto(SOCKET, char*, int, int, SOCKADDR*, int); | |
528 int setsockopt(SOCKET, int, int, char*, int); | |
529 int shutdown(SOCKET, int); | |
530 SOCKET socket(int, int, int); | |
531 int WSAStartup(WORD, LPWSADATA); | |
532 int WSACleanup(); | |
533 void WSASetLastError(int); | |
534 int WSAGetLastError(); | |
535 BOOL WSAIsBlocking(); | |
536 int WSAUnhookBlockingHook(); | |
537 FARPROC WSASetBlockingHook(FARPROC); | |
538 int WSACancelBlockingCall(); | |
539 HANDLE WSAAsyncGetServByName(HWND, u_int, char*, char*, char*, int); | |
540 HANDLE WSAAsyncGetServByPort(HWND, u_int, int, char*, char*, int); | |
541 HANDLE WSAAsyncGetProtoByName(HWND, u_int, char*, char*, int); | |
542 HANDLE WSAAsyncGetProtoByNumber(HWND, u_int, int, char*, int); | |
543 HANDLE WSAAsyncGetHostByName(HWND, u_int, char*, char*, int); | |
544 HANDLE WSAAsyncGetHostByAddr(HWND, u_int, char*, int, int, char*, int); | |
545 int WSACancelAsyncRequest(HANDLE); | |
546 int WSAAsyncSelect(SOCKET, HWND, u_int, int); | |
547 u_long htonl(u_long); | |
548 u_long ntohl(u_long); | |
549 u_short htons(u_short); | |
550 u_short ntohs(u_short); | |
551 int select(int nfds, FD_SET*, FD_SET*, FD_SET*, TIMEVAL*); | |
552 int gethostname(char*, int); | |
553 } | |
554 | |
555 extern (Windows) { | |
556 char* inet_ntoa(IN_ADDR); | |
557 HOSTENT* gethostbyaddr(char*, int, int); | |
558 HOSTENT* gethostbyname(char*); | |
559 SERVENT* getservbyport(int, char*); | |
560 SERVENT* getservbyname(char*, char*); | |
561 PROTOENT* getprotobynumber(int); | |
562 PROTOENT* getprotobyname(char*); | |
563 } | |
564 | |
565 alias MAKELONG WSAMAKEASYNCREPLY, WSAMAKESELECTREPLY; | |
566 alias LOWORD WSAGETASYNCBUFLEN, WSAGETSELECTEVENT; | |
567 alias HIWORD WSAGETASYNCERROR, WSAGETSELECTERROR; | |
568 | |
569 | |
570 /* | |
571 * Recent MSDN docs indicate that the MS-specific extensions exported from | |
572 * mswsock.dll (AcceptEx, TransmitFile. WSARecEx and GetAcceptExSockaddrs) are | |
573 * declared in mswsock.h. These extensions are not supported on W9x or WinCE. | |
574 * However, code using WinSock 1.1 API may expect the declarations and | |
575 * associated defines to be in this header. Thus we include mswsock.h here. | |
576 * | |
577 * When linking against the WinSock 1.1 lib, wsock32.dll, the mswsock functions | |
578 * are automatically routed to mswsock.dll (on platforms with support). | |
579 * The WinSock 2 lib, ws2_32.dll, does not contain any references to | |
580 * the mswsock extensions. | |
581 */ | |
582 | |
583 import win32.mswsock; |