1 module win32.winsock;
2
3 // Translated from Microsoft Platform SDK August 2001 Edition
4 // by Y.Tomino (demoonlit@inter7.jp)
5
6
7 // #ifndef _WINSOCKAPI_
8 // #define _WINSOCKAPI_
9
10 // #if _MSC_VER > 1000
11 // #pragma once
12 // #endif
13
14 // #ifndef _INC_WINDOWS
15 import win32.windows;
16 // #endif /* _INC_WINDOWS */
17
18 alias ubyte u_char;
19 alias ushort u_short;
20 alias uint u_int;
21 alias uint u_long;
22
23 alias UINT_PTR SOCKET;
24
25 // #ifndef FD_SETSIZE
26 enum : uint { FD_SETSIZE = 64 }
27 // #endif /* FD_SETSIZE */
28
29 struct fd_set {
30 u_int fd_count;
31 SOCKET fd_array[FD_SETSIZE];
32 }
33
34 // #ifdef __cplusplus
35 // extern "C" {
36 // #endif
37
38 extern(Windows) export int __WSAFDIsSet(SOCKET, fd_set *);
39
40 // #ifdef __cplusplus
41 // }
42 // #endif
43
44 // #define FD_CLR(fd, set) do { u_int __i; for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count ; __i++) { if (((fd_set FAR *)(set))->fd_array[__i] == fd) { while (__i < ((fd_set FAR *)(set))->fd_count-1) { ((fd_set FAR *)(set))->fd_array[__i] = ((fd_set FAR *)(set))->fd_array[__i+1]; __i++; } ((fd_set FAR *)(set))->fd_count--; break; } } } while(0)
45
46 void FD_SET(int fd, fd_set* set){ if(set.fd_count < FD_SETSIZE){ set.fd_array[set.fd_count++] = fd; }}
47
48 void FD_ZERO(fd_set* set){ set.fd_count = 0; }
49
50 // #define FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (fd_set FAR *)(set))
51
52 struct timeval {
53 int tv_sec;
54 int tv_usec;
55 }
56
57 // #define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
58 // #define timercmp(tvp, uvp, cmp) ((tvp)->tv_sec cmp (uvp)->tv_sec || (tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec)
59 // #define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0
60
61 enum : uint { IOCPARM_MASK = 0x7f }
62 enum : uint { IOC_VOID = 0x20000000 }
63 enum : uint { IOC_OUT = 0x40000000 }
64 enum : uint { IOC_IN = 0x80000000 }
65 enum : uint { IOC_INOUT = IOC_IN|IOC_OUT }
66
67 // #define _IO(x,y) (IOC_VOID|((x)<<8)|(y))
68
69 // #define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
70
71 // #define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
72
73 // #define FIONREAD _IOR('f', 127, u_long)
74 // #define FIONBIO _IOW('f', 126, u_long)
75 // #define FIOASYNC _IOW('f', 125, u_long)
76
77 // #define SIOCSHIWAT _IOW('s', 0, u_long)
78 // #define SIOCGHIWAT _IOR('s', 1, u_long)
79 // #define SIOCSLOWAT _IOW('s', 2, u_long)
80 // #define SIOCGLOWAT _IOR('s', 3, u_long)
81 // #define SIOCATMARK _IOR('s', 7, u_long)
82
83 struct hostent {
84 char * h_name;
85 char** h_aliases;
86 short h_addrtype;
87 short h_length;
88 char** h_addr_list;
89 // #define h_addr h_addr_list[0]
90 }
91
92 struct netent {
93 char * n_name;
94 char** n_aliases;
95 short n_addrtype;
96 u_long n_net;
97 }
98
99 struct servent {
100 char * s_name;
101 char** s_aliases;
102 // #ifdef _WIN64
103 // ...
104 // #else
105 short s_port;
106 char * s_proto;
107 // #endif
108 }
109
110 struct protoent {
111 char * p_name;
112 char** p_aliases;
113 short p_proto;
114 }
115
116 enum : uint { IPPROTO_IP = 0 }
117 enum : uint { IPPROTO_ICMP = 1 }
118 enum : uint { IPPROTO_IGMP = 2 }
119 enum : uint { IPPROTO_GGP = 3 }
120 enum : uint { IPPROTO_TCP = 6 }
121 enum : uint { IPPROTO_PUP = 12 }
122 enum : uint { IPPROTO_UDP = 17 }
123 enum : uint { IPPROTO_IDP = 22 }
124 enum : uint { IPPROTO_ND = 77 }
125
126 enum : uint { IPPROTO_RAW = 255 }
127 enum : uint { IPPROTO_MAX = 256 }
128
129 enum : uint { IPPORT_ECHO = 7 }
130 enum : uint { IPPORT_DISCARD = 9 }
131 enum : uint { IPPORT_SYSTAT = 11 }
132 enum : uint { IPPORT_DAYTIME = 13 }
133 enum : uint { IPPORT_NETSTAT = 15 }
134 enum : uint { IPPORT_FTP = 21 }
135 enum : uint { IPPORT_TELNET = 23 }
136 enum : uint { IPPORT_SMTP = 25 }
137 enum : uint { IPPORT_TIMESERVER = 37 }
138 enum : uint { IPPORT_NAMESERVER = 42 }
139 enum : uint { IPPORT_WHOIS = 43 }
140 enum : uint { IPPORT_MTP = 57 }
141
142 enum : uint { IPPORT_TFTP = 69 }
143 enum : uint { IPPORT_RJE = 77 }
144 enum : uint { IPPORT_FINGER = 79 }
145 enum : uint { IPPORT_TTYLINK = 87 }
146 enum : uint { IPPORT_SUPDUP = 95 }
147
148 enum : uint { IPPORT_EXECSERVER = 512 }
149 enum : uint { IPPORT_LOGINSERVER = 513 }
150 enum : uint { IPPORT_CMDSERVER = 514 }
151 enum : uint { IPPORT_EFSSERVER = 520 }
152
153 enum : uint { IPPORT_BIFFUDP = 512 }
154 enum : uint { IPPORT_WHOSERVER = 513 }
155 enum : uint { IPPORT_ROUTESERVER = 520 }
156
157 enum : uint { IPPORT_RESERVED = 1024 }
158
159 enum : uint { IMPLINK_IP = 155 }
160 enum : uint { IMPLINK_LOWEXPER = 156 }
161 enum : uint { IMPLINK_HIGHEXPER = 158 }
162
163 struct in_addr {
164 union {
165 struct { u_char s_b1,s_b2,s_b3,s_b4; }
166 struct { u_short s_w1,s_w2; }
167 u_long S_addr;
168 }
169
170 // #define s_addr S_un.S_addr
171
172 // #define s_host S_un.S_un_b.s_b2
173
174 // #define s_net S_un.S_un_b.s_b1
175
176 // #define s_imp S_un.S_un_w.s_w2
177
178 // #define s_impno S_un.S_un_b.s_b4
179
180 // #define s_lh S_un.S_un_b.s_b3
181
182 }
183
184 // #define IN_CLASSA(i) (((long)(i) & 0x80000000) == 0)
185 enum : uint { IN_CLASSA_NET = 0xff000000 }
186 enum : uint { IN_CLASSA_NSHIFT = 24 }
187 enum : uint { IN_CLASSA_HOST = 0x00ffffff }
188 enum : uint { IN_CLASSA_MAX = 128 }
189
190 // #define IN_CLASSB(i) (((long)(i) & 0xc0000000) == 0x80000000)
191 // #define IN_CLASSB_NET 0xffff0000
192 // #define IN_CLASSB_NSHIFT 16
193 enum : uint { IN_CLASSB_HOST = 0x0000ffff }
194 enum : uint { IN_CLASSB_MAX = 65536 }
195
196 // #define IN_CLASSC(i) (((long)(i) & 0xe0000000) == 0xc0000000)
197 // #define IN_CLASSC_NET 0xffffff00
198 // #define IN_CLASSC_NSHIFT 8
199 enum : uint { IN_CLASSC_HOST = 0x000000ff }
200
201 enum : uint { INADDR_ANY = 0 }
202 enum : uint { INADDR_LOOPBACK = 0x7f000001 }
203 // #define INADDR_BROADCAST (u_long)0xffffffff
204 enum : uint { INADDR_NONE = uint.max }
205
206 struct sockaddr_in {
207 short sin_family;
208 u_short sin_port;
209 in_addr sin_addr;
210 char sin_zero[8];
211 }
212
213 enum : uint { WSADESCRIPTION_LEN = 256 }
214 enum : uint { WSASYS_STATUS_LEN = 128 }
215
216 struct WSAData {
217 WORD wVersion;
218 WORD wHighVersion;
219 // #ifdef _WIN64
220 // ...
221 // #else
222 char szDescription[WSADESCRIPTION_LEN+1];
223 char szSystemStatus[WSASYS_STATUS_LEN+1];
224 ushort iMaxSockets;
225 ushort iMaxUdpDg;
226 char * lpVendorInfo;
227 // #endif
228 }
229 alias WSAData WSADATA;
230
231 alias WSADATA* LPWSADATA;
232
233 enum : uint { IP_OPTIONS = 1 }
234 enum : uint { IP_MULTICAST_IF = 2 }
235 enum : uint { IP_MULTICAST_TTL = 3 }
236 enum : uint { IP_MULTICAST_LOOP = 4 }
237 enum : uint { IP_ADD_MEMBERSHIP = 5 }
238 enum : uint { IP_DROP_MEMBERSHIP = 6 }
239 enum : uint { IP_TTL = 7 }
240 enum : uint { IP_TOS = 8 }
241 enum : uint { IP_DONTFRAGMENT = 9 }
242
243 enum : uint { IP_DEFAULT_MULTICAST_TTL = 1 }
244 enum : uint { IP_DEFAULT_MULTICAST_LOOP = 1 }
245 enum : uint { IP_MAX_MEMBERSHIPS = 20 }
246
247 struct ip_mreq {
248 in_addr imr_multiaddr;
249 in_addr imr_interface;
250 }
251
252 enum : uint { INVALID_SOCKET = uint.max }
253 enum { SOCKET_ERROR = -1 }
254
255 enum : uint { SOCK_STREAM = 1 }
256 enum : uint { SOCK_DGRAM = 2 }
257 enum : uint { SOCK_RAW = 3 }
258 enum : uint { SOCK_RDM = 4 }
259 enum : uint { SOCK_SEQPACKET = 5 }
260
261 enum : uint { SO_DEBUG = 0x0001 }
262 enum : uint { SO_ACCEPTCONN = 0x0002 }
263 enum : uint { SO_REUSEADDR = 0x0004 }
264 enum : uint { SO_KEEPALIVE = 0x0008 }
265 enum : uint { SO_DONTROUTE = 0x0010 }
266 enum : uint { SO_BROADCAST = 0x0020 }
267 enum : uint { SO_USELOOPBACK = 0x0040 }
268 enum : uint { SO_LINGER = 0x0080 }
269 enum : uint { SO_OOBINLINE = 0x0100 }
270
271 enum : uint { SO_DONTLINGER = ~SO_LINGER }
272
273 enum : uint { SO_SNDBUF = 0x1001 }
274 enum : uint { SO_RCVBUF = 0x1002 }
275 enum : uint { SO_SNDLOWAT = 0x1003 }
276 enum : uint { SO_RCVLOWAT = 0x1004 }
277 enum : uint { SO_SNDTIMEO = 0x1005 }
278 enum : uint { SO_RCVTIMEO = 0x1006 }
279 enum : uint { SO_ERROR = 0x1007 }
280 enum : uint { SO_TYPE = 0x1008 }
281
282 enum : uint { SO_CONNDATA = 0x7000 }
283 enum : uint { SO_CONNOPT = 0x7001 }
284 enum : uint { SO_DISCDATA = 0x7002 }
285 enum : uint { SO_DISCOPT = 0x7003 }
286 enum : uint { SO_CONNDATALEN = 0x7004 }
287 enum : uint { SO_CONNOPTLEN = 0x7005 }
288 enum : uint { SO_DISCDATALEN = 0x7006 }
289 enum : uint { SO_DISCOPTLEN = 0x7007 }
290
291 enum : uint { SO_OPENTYPE = 0x7008 }
292
293 enum : uint { SO_SYNCHRONOUS_ALERT = 0x10 }
294 enum : uint { SO_SYNCHRONOUS_NONALERT = 0x20 }
295
296 enum : uint { SO_MAXDG = 0x7009 }
297 enum : uint { SO_MAXPATHDG = 0x700A }
298 enum : uint { SO_UPDATE_ACCEPT_CONTEXT = 0x700B }
299 enum : uint { SO_CONNECT_TIME = 0x700C }
300
301 enum : uint { TCP_NODELAY = 0x0001 }
302 enum : uint { TCP_BSDURGENT = 0x7000 }
303
304 enum : uint { AF_UNSPEC = 0 }
305 enum : uint { AF_UNIX = 1 }
306 enum : uint { AF_INET = 2 }
307 enum : uint { AF_IMPLINK = 3 }
308 enum : uint { AF_PUP = 4 }
309 enum : uint { AF_CHAOS = 5 }
310 enum : uint { AF_IPX = 6 }
311 enum : uint { AF_NS = 6 }
312 enum : uint { AF_ISO = 7 }
313 alias AF_ISO AF_OSI;
314 enum : uint { AF_ECMA = 8 }
315 enum : uint { AF_DATAKIT = 9 }
316 enum : uint { AF_CCITT = 10 }
317 enum : uint { AF_SNA = 11 }
318 enum : uint { AF_DECnet = 12 }
319 enum : uint { AF_DLI = 13 }
320 enum : uint { AF_LAT = 14 }
321 enum : uint { AF_HYLINK = 15 }
322 enum : uint { AF_APPLETALK = 16 }
323 enum : uint { AF_NETBIOS = 17 }
324 enum : uint { AF_VOICEVIEW = 18 }
325 enum : uint { AF_FIREFOX = 19 }
326 enum : uint { AF_UNKNOWN1 = 20 }
327 enum : uint { AF_BAN = 21 }
328
329 enum : uint { AF_MAX = 22 }
330
331 struct sockaddr {
332 u_short sa_family;
333 char sa_data[14];
334 }
335
336 struct sockproto {
337 u_short sp_family;
338 u_short sp_protocol;
339 }
340
341 alias AF_UNSPEC PF_UNSPEC;
342 alias AF_UNIX PF_UNIX;
343 alias AF_INET PF_INET;
344 alias AF_IMPLINK PF_IMPLINK;
345 alias AF_PUP PF_PUP;
346 alias AF_CHAOS PF_CHAOS;
347 alias AF_NS PF_NS;
348 alias AF_IPX PF_IPX;
349 alias AF_ISO PF_ISO;
350 alias AF_OSI PF_OSI;
351 alias AF_ECMA PF_ECMA;
352 alias AF_DATAKIT PF_DATAKIT;
353 alias AF_CCITT PF_CCITT;
354 alias AF_SNA PF_SNA;
355 alias AF_DECnet PF_DECnet;
356 alias AF_DLI PF_DLI;
357 alias AF_LAT PF_LAT;
358 alias AF_HYLINK PF_HYLINK;
359 alias AF_APPLETALK PF_APPLETALK;
360 alias AF_VOICEVIEW PF_VOICEVIEW;
361 alias AF_FIREFOX PF_FIREFOX;
362 alias AF_UNKNOWN1 PF_UNKNOWN1;
363 alias AF_BAN PF_BAN;
364
365 alias AF_MAX PF_MAX;
366
367 struct linger {
368 u_short l_onoff;
369 u_short l_linger;
370 }
371
372 enum : uint { SOL_SOCKET = 0xffff }
373
374 enum : uint { SOMAXCONN = 5 }
375
376 enum : uint { MSG_OOB = 0x1 }
377 enum : uint { MSG_PEEK = 0x2 }
378 enum : uint { MSG_DONTROUTE = 0x4 }
379
380 enum : uint { MSG_MAXIOVLEN = 16 }
381
382 enum : uint { MSG_PARTIAL = 0x8000 }
383
384 enum : uint { MAXGETHOSTSTRUCT = 1024 }
385
386 enum : uint { FD_READ = 0x01 }
387 enum : uint { FD_WRITE = 0x02 }
388 enum : uint { FD_OOB = 0x04 }
389 enum : uint { FD_ACCEPT = 0x08 }
390 enum : uint { FD_CONNECT = 0x10 }
391 enum : uint { FD_CLOSE = 0x20 }
392
393 // #ifndef WSABASEERR
394
395 enum : uint { WSABASEERR = 10000 }
396
397 enum : uint { WSAEINTR = WSABASEERR+4 }
398 enum : uint { WSAEBADF = WSABASEERR+9 }
399 enum : uint { WSAEACCES = WSABASEERR+13 }
400 enum : uint { WSAEFAULT = WSABASEERR+14 }
401 enum : uint { WSAEINVAL = WSABASEERR+22 }
402 enum : uint { WSAEMFILE = WSABASEERR+24 }
403
404 enum : uint { WSAEWOULDBLOCK = WSABASEERR+35 }
405 enum : uint { WSAEINPROGRESS = WSABASEERR+36 }
406 enum : uint { WSAEALREADY = WSABASEERR+37 }
407 enum : uint { WSAENOTSOCK = WSABASEERR+38 }
408 enum : uint { WSAEDESTADDRREQ = WSABASEERR+39 }
409 enum : uint { WSAEMSGSIZE = WSABASEERR+40 }
410 enum : uint { WSAEPROTOTYPE = WSABASEERR+41 }
411 enum : uint { WSAENOPROTOOPT = WSABASEERR+42 }
412 enum : uint { WSAEPROTONOSUPPORT = WSABASEERR+43 }
413 enum : uint { WSAESOCKTNOSUPPORT = WSABASEERR+44 }
414 enum : uint { WSAEOPNOTSUPP = WSABASEERR+45 }
415 enum : uint { WSAEPFNOSUPPORT = WSABASEERR+46 }
416 enum : uint { WSAEAFNOSUPPORT = WSABASEERR+47 }
417 enum : uint { WSAEADDRINUSE = WSABASEERR+48 }
418 enum : uint { WSAEADDRNOTAVAIL = WSABASEERR+49 }
419 enum : uint { WSAENETDOWN = WSABASEERR+50 }
420 enum : uint { WSAENETUNREACH = WSABASEERR+51 }
421 enum : uint { WSAENETRESET = WSABASEERR+52 }
422 enum : uint { WSAECONNABORTED = WSABASEERR+53 }
423 enum : uint { WSAECONNRESET = WSABASEERR+54 }
424 enum : uint { WSAENOBUFS = WSABASEERR+55 }
425 enum : uint { WSAEISCONN = WSABASEERR+56 }
426 enum : uint { WSAENOTCONN = WSABASEERR+57 }
427 enum : uint { WSAESHUTDOWN = WSABASEERR+58 }
428 enum : uint { WSAETOOMANYREFS = WSABASEERR+59 }
429 enum : uint { WSAETIMEDOUT = WSABASEERR+60 }
430 enum : uint { WSAECONNREFUSED = WSABASEERR+61 }
431 enum : uint { WSAELOOP = WSABASEERR+62 }
432 enum : uint { WSAENAMETOOLONG = WSABASEERR+63 }
433 enum : uint { WSAEHOSTDOWN = WSABASEERR+64 }
434 enum : uint { WSAEHOSTUNREACH = WSABASEERR+65 }
435 enum : uint { WSAENOTEMPTY = WSABASEERR+66 }
436 enum : uint { WSAEPROCLIM = WSABASEERR+67 }
437 enum : uint { WSAEUSERS = WSABASEERR+68 }
438 enum : uint { WSAEDQUOT = WSABASEERR+69 }
439 enum : uint { WSAESTALE = WSABASEERR+70 }
440 enum : uint { WSAEREMOTE = WSABASEERR+71 }
441
442 enum : uint { WSAEDISCON = WSABASEERR+101 }
443
444 enum : uint { WSASYSNOTREADY = WSABASEERR+91 }
445 enum : uint { WSAVERNOTSUPPORTED = WSABASEERR+92 }
446 enum : uint { WSANOTINITIALISED = WSABASEERR+93 }
447
448 enum : uint { WSAHOST_NOT_FOUND = WSABASEERR+1001 }
449
450 enum : uint { WSATRY_AGAIN = WSABASEERR+1002 }
451
452 enum : uint { WSANO_RECOVERY = WSABASEERR+1003 }
453
454 enum : uint { WSANO_DATA = WSABASEERR+1004 }
455
456 // #endif /* ifdef WSABASEERR */
457
458 // #define h_errno WSAGetLastError()
459 alias WSAHOST_NOT_FOUND HOST_NOT_FOUND;
460 alias WSATRY_AGAIN TRY_AGAIN;
461 alias WSANO_RECOVERY NO_RECOVERY;
462 alias WSANO_DATA NO_DATA;
463
464 alias WSANO_DATA WSANO_ADDRESS;
465 alias WSANO_ADDRESS NO_ADDRESS;
466
467 // #if 0
468 // #...
469 // #...
470 // #...
471 // #...
472 // #...
473 // #...
474 // #...
475 // #...
476 // #...
477 // #...
478 // #...
479 // #...
480 // #...
481 // #...
482 // #...
483 // #...
484 // #...
485 // #...
486 // #...
487 // #...
488 // #...
489 // #...
490 // #...
491 // #...
492 // #...
493 // #...
494 // #...
495 // #...
496 // #...
497 // #...
498 // #...
499 // #...
500 // #...
501 // #...
502 // #...
503 // #...
504 // #...
505 // #endif
506
507 // #ifdef __cplusplus
508 // extern "C" {
509 // #endif
510
511 extern(Windows) export SOCKET accept(
512 SOCKET s,
513 sockaddr *addr,
514 int *addrlen);
515
516 extern(Windows) export int bind(
517 SOCKET s,
518 sockaddr *addr,
519 int namelen);
520
521 extern(Windows) export int closesocket(SOCKET s);
522
523 extern(Windows) export int connect(
524 SOCKET s,
525 sockaddr *name,
526 int namelen);
527
528 extern(Windows) export int ioctlsocket(
529 SOCKET s,
530 int cmd,
531 u_long *argp);
532
533 extern(Windows) export int getpeername(
534 SOCKET s,
535 sockaddr *name,
536 int * namelen);
537
538 extern(Windows) export int getsockname(
539 SOCKET s,
540 sockaddr *name,
541 int * namelen);
542
543 extern(Windows) export int getsockopt(
544 SOCKET s,
545 int level,
546 int optname,
547 char * optval,
548 int *optlen);
549
550 extern(Windows) export u_long htonl(u_long hostlong);
551
552 extern(Windows) export u_short htons(u_short hostshort);
553
554 extern(Windows) export uint inet_addr( char * cp);
555
556 extern(Windows) export char* inet_ntoa(uint in_);
557 extern(Windows) export int listen(
558 SOCKET s,
559 int backlog);
560
561 extern(Windows) export u_long ntohl(u_long netlong);
562
563 extern(Windows) export u_short ntohs(u_short netshort);
564
565 extern(Windows) export int recv(
566 SOCKET s,
567 char * buf,
568 int len,
569 int flags);
570
571 extern(Windows) export int recvfrom(
572 SOCKET s,
573 char * buf,
574 int len,
575 int flags,
576 sockaddr *from,
577 int * fromlen);
578
579 extern(Windows) export int select(
580 int nfds,
581 fd_set *readfds,
582 fd_set *writefds,
583 fd_set *exceptfds,
584 timeval *timeout);
585
586 extern(Windows) export int send(
587 SOCKET s,
588 char * buf,
589 int len,
590 int flags);
591
592 extern(Windows) export int sendto(
593 SOCKET s,
594 char * buf,
595 int len,
596 int flags,
597 sockaddr *to,
598 int tolen);
599
600 extern(Windows) export int setsockopt(
601 SOCKET s,
602 int level,
603 int optname,
604 char * optval,
605 int optlen);
606
607 extern(Windows) export int shutdown(
608 SOCKET s,
609 int how);
610
611 extern(Windows) export SOCKET socket(
612 int af,
613 int type,
614 int protocol);
615
616 extern(Windows) export hostent* gethostbyaddr(
617 char * addr,
618 int len,
619 int type);
620 extern(Windows) export hostent* gethostbyname( char * name);
621 extern(Windows) export int gethostname(
622 char * name,
623 int namelen);
624
625 extern(Windows) export servent* getservbyport(
626 int port,
627 char * proto);
628 extern(Windows) export servent* getservbyname(
629 char * name,
630 char * proto);
631 extern(Windows) export protoent* getprotobynumber( int proto);
632 extern(Windows) export protoent* getprotobyname( char * name);
633
634 extern(Windows) export int WSAStartup(
635 WORD wVersionRequired,
636 LPWSADATA lpWSAData);
637
638 extern(Windows) export int WSACleanup();
639
640 extern(Windows) export void WSASetLastError(int iError);
641
642 extern(Windows) export int WSAGetLastError();
643
644 extern(Windows) export BOOL WSAIsBlocking();
645
646 extern(Windows) export int WSAUnhookBlockingHook();
647
648 extern(Windows) export FARPROC WSASetBlockingHook(FARPROC lpBlockFunc);
649
650 extern(Windows) export int WSACancelBlockingCall();
651
652 extern(Windows) export HANDLE WSAAsyncGetServByName(
653 HWND hWnd,
654 u_int wMsg,
655 char * name,
656 char * proto,
657 char * buf,
658 int buflen);
659
660 extern(Windows) export HANDLE WSAAsyncGetServByPort(
661 HWND hWnd,
662 u_int wMsg,
663 int port,
664 char * proto,
665 char * buf,
666 int buflen);
667
668 extern(Windows) export HANDLE WSAAsyncGetProtoByName(
669 HWND hWnd,
670 u_int wMsg,
671 char * name,
672 char * buf,
673 int buflen);
674
675 extern(Windows) export HANDLE WSAAsyncGetProtoByNumber(
676 HWND hWnd,
677 u_int wMsg,
678 int number,
679 char * buf,
680 int buflen);
681
682 extern(Windows) export HANDLE WSAAsyncGetHostByName(
683 HWND hWnd,
684 u_int wMsg,
685 char * name,
686 char * buf,
687 int buflen);
688
689 extern(Windows) export HANDLE WSAAsyncGetHostByAddr(
690 HWND hWnd,
691 u_int wMsg,
692 char * addr,
693 int len,
694 int type,
695 char * buf,
696 int buflen);
697
698 extern(Windows) export int WSACancelAsyncRequest(HANDLE hAsyncTaskHandle);
699
700 extern(Windows) export int WSAAsyncSelect(
701 SOCKET s,
702 HWND hWnd,
703 u_int wMsg,
704 int lEvent);
705
706 extern(Windows) export int WSARecvEx(
707 SOCKET s,
708 char * buf,
709 int len,
710 int *flags);
711
712 struct _TRANSMIT_FILE_BUFFERS {
713 PVOID Head;
714 DWORD HeadLength;
715 PVOID Tail;
716 DWORD TailLength;
717 }
718 alias _TRANSMIT_FILE_BUFFERS TRANSMIT_FILE_BUFFERS;
719 alias _TRANSMIT_FILE_BUFFERS* PTRANSMIT_FILE_BUFFERS;
720 alias _TRANSMIT_FILE_BUFFERS* LPTRANSMIT_FILE_BUFFERS;
721
722 enum : uint { TF_DISCONNECT = 0x01 }
723 enum : uint { TF_REUSE_SOCKET = 0x02 }
724 enum : uint { TF_WRITE_BEHIND = 0x04 }
725
726 extern(Windows) export BOOL TransmitFile(
727 SOCKET hSocket,
728 HANDLE hFile,
729 DWORD nNumberOfBytesToWrite,
730 DWORD nNumberOfBytesPerSend,
731 LPOVERLAPPED lpOverlapped,
732 LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers,
733 DWORD dwReserved);
734
735 extern(Windows) export BOOL AcceptEx(
736 SOCKET sListenSocket,
737 SOCKET sAcceptSocket,
738 PVOID lpOutputBuffer,
739 DWORD dwReceiveDataLength,
740 DWORD dwLocalAddressLength,
741 DWORD dwRemoteAddressLength,
742 LPDWORD lpdwBytesReceived,
743 LPOVERLAPPED lpOverlapped);
744
745 extern(Windows) export VOID GetAcceptExSockaddrs(
746 PVOID lpOutputBuffer,
747 DWORD dwReceiveDataLength,
748 DWORD dwLocalAddressLength,
749 DWORD dwRemoteAddressLength,
750 sockaddr **LocalSockaddr,
751 LPINT LocalSockaddrLength,
752 sockaddr **RemoteSockaddr,
753 LPINT RemoteSockaddrLength);
754
755 // #ifdef __cplusplus
756 // }
757 // #endif
758
759 alias sockaddr SOCKADDR;
760 alias sockaddr* PSOCKADDR;
761 alias sockaddr* LPSOCKADDR;
762
763 alias sockaddr_in SOCKADDR_IN;
764 alias sockaddr_in* PSOCKADDR_IN;
765 alias sockaddr_in* LPSOCKADDR_IN;
766
767 alias linger LINGER;
768 alias linger* PLINGER;
769 alias linger* LPLINGER;
770
771 alias in_addr IN_ADDR;
772 alias in_addr* PIN_ADDR;
773 alias in_addr* LPIN_ADDR;
774
775 alias fd_set FD_SET;
776 alias fd_set* PFD_SET;
777 alias fd_set* LPFD_SET;
778
779 alias hostent HOSTENT;
780 alias hostent* PHOSTENT;
781 alias hostent* LPHOSTENT;
782
783 alias servent SERVENT;
784 alias servent* PSERVENT;
785 alias servent* LPSERVENT;
786
787 alias protoent PROTOENT;
788 alias protoent* PPROTOENT;
789 alias protoent* LPPROTOENT;
790
791 alias timeval TIMEVAL;
792 alias timeval* PTIMEVAL;
793 alias timeval* LPTIMEVAL;
794
795 // #define WSAMAKEASYNCREPLY(buflen,error) MAKELONG(buflen,error)
796
797 // #define WSAMAKESELECTREPLY(event,error) MAKELONG(event,error)
798
799 // #define WSAGETASYNCBUFLEN(lParam) LOWORD(lParam)
800
801 // #define WSAGETASYNCERROR(lParam) HIWORD(lParam)
802
803 // #define WSAGETSELECTEVENT(lParam) LOWORD(lParam)
804
805 // #define WSAGETSELECTERROR(lParam) HIWORD(lParam)
806
807 // #ifdef IPV6STRICT
808 // #...
809 // #endif // IPV6STRICT
810
811 // #endif /* _WINSOCKAPI_ */