Artifact Content

Not logged in

Artifact 4798081e9cfbad324fce77e290f5d829858f2040


     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_ */