File Annotation

Not logged in
9b639cf2d6 2015-05-05        kinaba: /***********************************************************************\
9b639cf2d6 2015-05-05        kinaba: *                               winsock.d                               *
9b639cf2d6 2015-05-05        kinaba: *                                                                       *
9b639cf2d6 2015-05-05        kinaba: *                       Windows API header module                       *
9b639cf2d6 2015-05-05        kinaba: *                                                                       *
9b639cf2d6 2015-05-05        kinaba: *                 Translated from MinGW Windows headers                 *
9b639cf2d6 2015-05-05        kinaba: *                           by Stewart Gordon                           *
9b639cf2d6 2015-05-05        kinaba: \***********************************************************************/
9b639cf2d6 2015-05-05        kinaba: module win32.winsock;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: /*
9b639cf2d6 2015-05-05        kinaba:   Definitions for winsock 1.1
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba:   Portions Copyright (c) 1980, 1983, 1988, 1993
9b639cf2d6 2015-05-05        kinaba:   The Regents of the University of California.  All rights reserved.
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba:   Portions Copyright (c) 1993 by Digital Equipment Corporation.
9b639cf2d6 2015-05-05        kinaba:  */
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: /*	DRK: This module should not be included if -version=Win32_Winsock2 has
9b639cf2d6 2015-05-05        kinaba:  *	been set.  If it has, assert.  I think it's better that way than letting
9b639cf2d6 2015-05-05        kinaba:  *	the user believe that it's worked.
9b639cf2d6 2015-05-05        kinaba:  *
9b639cf2d6 2015-05-05        kinaba:  *	SG: It has now been changed so that winsock2 is the default, and
9b639cf2d6 2015-05-05        kinaba:  *	-version=Win32_Winsock1 must be set to use winsock.
9b639cf2d6 2015-05-05        kinaba:  */
9b639cf2d6 2015-05-05        kinaba: version(Win32_Winsock1) {}
9b639cf2d6 2015-05-05        kinaba: else {
9b639cf2d6 2015-05-05        kinaba:     pragma(msg, "Cannot use win32.winsock without "
9b639cf2d6 2015-05-05        kinaba: 			~ "Win32_Winsock1 defined.");
9b639cf2d6 2015-05-05        kinaba:     static assert(false);
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: import win32.windef;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: alias char u_char;
9b639cf2d6 2015-05-05        kinaba: alias ushort u_short;
9b639cf2d6 2015-05-05        kinaba: alias uint u_int, u_long, SOCKET;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: const size_t FD_SETSIZE = 64;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: // shutdown() how types
9b639cf2d6 2015-05-05        kinaba: enum : int {
9b639cf2d6 2015-05-05        kinaba: 	SD_RECEIVE,
9b639cf2d6 2015-05-05        kinaba: 	SD_SEND,
9b639cf2d6 2015-05-05        kinaba: 	SD_BOTH
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: struct FD_SET {
9b639cf2d6 2015-05-05        kinaba: 	u_int              fd_count;
9b639cf2d6 2015-05-05        kinaba: 	SOCKET[FD_SETSIZE] fd_array;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: 	static void opCall(SOCKET fd, FD_SET* set) {
9b639cf2d6 2015-05-05        kinaba: 		if (set.fd_count < FD_SETSIZE) set.fd_array[set.fd_count++] = fd;
9b639cf2d6 2015-05-05        kinaba: 	}
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: alias FD_SET* PFD_SET, LPFD_SET;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: extern(Pascal) int __WSAFDIsSet(SOCKET, FD_SET*);
9b639cf2d6 2015-05-05        kinaba: alias __WSAFDIsSet FD_ISSET;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: void FD_CLR(SOCKET fd, FD_SET* set) {
9b639cf2d6 2015-05-05        kinaba: 	for (u_int i = 0; i < set.fd_count; i++) {
9b639cf2d6 2015-05-05        kinaba: 		if (set.fd_array[i] == fd) {
9b639cf2d6 2015-05-05        kinaba: 			while (i < set.fd_count - 1) {
9b639cf2d6 2015-05-05        kinaba: 				set.fd_array[i] = set.fd_array[i+1];
9b639cf2d6 2015-05-05        kinaba: 				i++;
9b639cf2d6 2015-05-05        kinaba: 			}
9b639cf2d6 2015-05-05        kinaba: 			set.fd_count--;
9b639cf2d6 2015-05-05        kinaba: 			break;
9b639cf2d6 2015-05-05        kinaba: 		}
9b639cf2d6 2015-05-05        kinaba: 	}
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: /+void FD_SET(SOCKET fd, FD_SET* set) {
9b639cf2d6 2015-05-05        kinaba: 	if (set.fd_count < FD_SETSIZE) set.fd_array[set.fd_count++] = fd;
9b639cf2d6 2015-05-05        kinaba: }+/
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: void FD_ZERO(FD_SET* set) {
9b639cf2d6 2015-05-05        kinaba: 	set.fd_count = 0;
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: struct TIMEVAL {
9b639cf2d6 2015-05-05        kinaba: 	int tv_sec;
9b639cf2d6 2015-05-05        kinaba: 	int tv_usec;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: 	int opCmp(TIMEVAL tv) {
9b639cf2d6 2015-05-05        kinaba: 		if (tv_sec < tv.tv_sec)   return -1;
9b639cf2d6 2015-05-05        kinaba: 		if (tv_sec > tv.tv_sec)   return  1;
9b639cf2d6 2015-05-05        kinaba: 		if (tv_usec < tv.tv_usec) return -1;
9b639cf2d6 2015-05-05        kinaba: 		if (tv_usec > tv.tv_usec) return  1;
9b639cf2d6 2015-05-05        kinaba: 		return 0;
9b639cf2d6 2015-05-05        kinaba: 	}
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: alias TIMEVAL* PTIMEVAL, LPTIMEVAL;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: bool timerisset(TIMEVAL tvp) {
9b639cf2d6 2015-05-05        kinaba: 	return tvp.tv_sec || tvp.tv_usec;
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: void timerclear(ref TIMEVAL tvp) {
9b639cf2d6 2015-05-05        kinaba: 	tvp.tv_sec = tvp.tv_usec = 0;
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: struct HOSTENT {
9b639cf2d6 2015-05-05        kinaba: 	char*  h_name;
9b639cf2d6 2015-05-05        kinaba: 	char** h_aliases;
9b639cf2d6 2015-05-05        kinaba: 	short  h_addrtype;
9b639cf2d6 2015-05-05        kinaba: 	short  h_length;
9b639cf2d6 2015-05-05        kinaba: 	char** h_addr_list;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: 	char* h_addr() { return h_addr_list[0]; }
9b639cf2d6 2015-05-05        kinaba: 	char* h_addr(char* h) { return h_addr_list[0] = h; }
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: alias HOSTENT* PHOSTENT, LPHOSTENT;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: struct LINGER {
9b639cf2d6 2015-05-05        kinaba: 	u_short l_onoff;
9b639cf2d6 2015-05-05        kinaba: 	u_short l_linger;
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: alias LINGER* PLINGER, LPLINGER;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: // TOTHINKABOUT: do we need these, or are they just for internal use?
9b639cf2d6 2015-05-05        kinaba: /+
9b639cf2d6 2015-05-05        kinaba: #define IOCPARM_MASK	0x7f
9b639cf2d6 2015-05-05        kinaba: #define IOC_VOID	0x20000000
9b639cf2d6 2015-05-05        kinaba: #define IOC_OUT	0x40000000
9b639cf2d6 2015-05-05        kinaba: #define IOC_IN	0x80000000
9b639cf2d6 2015-05-05        kinaba: #define IOC_INOUT	(IOC_IN|IOC_OUT)
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: #define _IO(x,y)	(IOC_VOID|((x)<<8)|(y))
9b639cf2d6 2015-05-05        kinaba: #define _IOR(x,y,t)	(IOC_OUT|(((int)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
9b639cf2d6 2015-05-05        kinaba: #define _IOW(x,y,t)	(IOC_IN|(((int)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: #define FIONBIO	_IOW('f', 126, u_long)
9b639cf2d6 2015-05-05        kinaba: #define FIONREAD	_IOR('f', 127, u_long)
9b639cf2d6 2015-05-05        kinaba: #define FIOASYNC	_IOW('f', 125, u_long)
9b639cf2d6 2015-05-05        kinaba: #define SIOCSHIWAT	_IOW('s',  0, u_long)
9b639cf2d6 2015-05-05        kinaba: #define SIOCGHIWAT	_IOR('s',  1, u_long)
9b639cf2d6 2015-05-05        kinaba: #define SIOCSLOWAT	_IOW('s',  2, u_long)
9b639cf2d6 2015-05-05        kinaba: #define SIOCGLOWAT	_IOR('s',  3, u_long)
9b639cf2d6 2015-05-05        kinaba: #define SIOCATMARK	_IOR('s',  7, u_long)
9b639cf2d6 2015-05-05        kinaba: +/
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: enum : DWORD {
9b639cf2d6 2015-05-05        kinaba: 	FIONBIO    = 0x8004667E,
9b639cf2d6 2015-05-05        kinaba: 	FIONREAD   = 0x4004667F,
9b639cf2d6 2015-05-05        kinaba: 	FIOASYNC   = 0x8004667D,
9b639cf2d6 2015-05-05        kinaba: 	SIOCSHIWAT = 0x80047300,
9b639cf2d6 2015-05-05        kinaba: 	SIOCGHIWAT = 0x40047301,
9b639cf2d6 2015-05-05        kinaba: 	SIOCSLOWAT = 0x80047302,
9b639cf2d6 2015-05-05        kinaba: 	SIOCGLOWAT = 0x40047303,
9b639cf2d6 2015-05-05        kinaba: 	SIOCATMARK = 0x40047307
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: struct netent {
9b639cf2d6 2015-05-05        kinaba: 	char*  n_name;
9b639cf2d6 2015-05-05        kinaba: 	char** n_aliases;
9b639cf2d6 2015-05-05        kinaba: 	short  n_addrtype;
9b639cf2d6 2015-05-05        kinaba: 	u_long n_net;
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: struct SERVENT {
9b639cf2d6 2015-05-05        kinaba: 	char*  s_name;
9b639cf2d6 2015-05-05        kinaba: 	char** s_aliases;
9b639cf2d6 2015-05-05        kinaba: 	short  s_port;
9b639cf2d6 2015-05-05        kinaba: 	char*  s_proto;
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: alias SERVENT* PSERVENT, LPSERVENT;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: struct PROTOENT {
9b639cf2d6 2015-05-05        kinaba: 	char*  p_name;
9b639cf2d6 2015-05-05        kinaba: 	char** p_aliases;
9b639cf2d6 2015-05-05        kinaba: 	short  p_proto;
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: alias PROTOENT* PPROTOENT, LPPROTOENT;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: enum : int {
9b639cf2d6 2015-05-05        kinaba: 	IPPROTO_IP   =   0,
9b639cf2d6 2015-05-05        kinaba: 	IPPROTO_ICMP =   1,
9b639cf2d6 2015-05-05        kinaba: 	IPPROTO_IGMP =   2,
9b639cf2d6 2015-05-05        kinaba: 	IPPROTO_GGP  =   3,
9b639cf2d6 2015-05-05        kinaba: 	IPPROTO_TCP  =   6,
9b639cf2d6 2015-05-05        kinaba: 	IPPROTO_PUP  =  12,
9b639cf2d6 2015-05-05        kinaba: 	IPPROTO_UDP  =  17,
9b639cf2d6 2015-05-05        kinaba: 	IPPROTO_IDP  =  22,
9b639cf2d6 2015-05-05        kinaba: 	IPPROTO_ND   =  77,
9b639cf2d6 2015-05-05        kinaba: 	IPPROTO_RAW  = 255,
9b639cf2d6 2015-05-05        kinaba: 	IPPROTO_MAX  = 256
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: // These are not documented on the MSDN site
9b639cf2d6 2015-05-05        kinaba: enum {
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_ECHO        =    7,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_DISCARD     =    9,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_SYSTAT      =   11,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_DAYTIME     =   13,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_NETSTAT     =   15,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_FTP         =   21,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_TELNET      =   23,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_SMTP        =   25,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_TIMESERVER  =   37,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_NAMESERVER  =   42,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_WHOIS       =   43,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_MTP         =   57,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_TFTP        =   69,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_RJE         =   77,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_FINGER      =   79,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_TTYLINK     =   87,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_SUPDUP      =   95,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_EXECSERVER  =  512,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_LOGINSERVER =  513,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_CMDSERVER   =  514,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_EFSSERVER   =  520,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_BIFFUDP     =  512,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_WHOSERVER   =  513,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_ROUTESERVER =  520,
9b639cf2d6 2015-05-05        kinaba: 	IPPORT_RESERVED    = 1024
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: // These are not documented on the MSDN site
9b639cf2d6 2015-05-05        kinaba: enum {
9b639cf2d6 2015-05-05        kinaba: 	IMPLINK_IP        = 155,
9b639cf2d6 2015-05-05        kinaba: 	IMPLINK_LOWEXPER  = 156,
9b639cf2d6 2015-05-05        kinaba: 	IMPLINK_HIGHEXPER = 158
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: struct IN_ADDR {
9b639cf2d6 2015-05-05        kinaba: 	union {
9b639cf2d6 2015-05-05        kinaba: 		struct { u_char s_net, s_host, s_lh, s_impno; }
9b639cf2d6 2015-05-05        kinaba: 		struct { u_short s_w1, s_imp; }
9b639cf2d6 2015-05-05        kinaba: 		u_long s_addr;
9b639cf2d6 2015-05-05        kinaba: 	}
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: alias IN_ADDR* PIN_ADDR, LPIN_ADDR;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: // IN_CLASSx are not used anywhere or documented on MSDN.
9b639cf2d6 2015-05-05        kinaba: bool IN_CLASSA(int i) {
9b639cf2d6 2015-05-05        kinaba: 	return (i & 0x80000000) == 0;
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: const IN_CLASSA_NET    = 0xff000000;
9b639cf2d6 2015-05-05        kinaba: const IN_CLASSA_NSHIFT =  24;
9b639cf2d6 2015-05-05        kinaba: const IN_CLASSA_HOST   = 0x00ffffff;
9b639cf2d6 2015-05-05        kinaba: const IN_CLASSA_MAX    = 128;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: bool IN_CLASSB(int i) {
9b639cf2d6 2015-05-05        kinaba: 	return (i & 0xC0000000) == 0x80000000;
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: const IN_CLASSB_NET    = 0xffff0000;
9b639cf2d6 2015-05-05        kinaba: const IN_CLASSB_NSHIFT = 16;
9b639cf2d6 2015-05-05        kinaba: const IN_CLASSB_HOST   = 0x0000ffff;
9b639cf2d6 2015-05-05        kinaba: const IN_CLASSB_MAX    = 65536;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: bool IN_CLASSC(int i) {
9b639cf2d6 2015-05-05        kinaba: 	return (i & 0xE0000000) == 0xC0000000;
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: const IN_CLASSC_NET    = 0xffffff00;
9b639cf2d6 2015-05-05        kinaba: const IN_CLASSC_NSHIFT = 8;
9b639cf2d6 2015-05-05        kinaba: const IN_CLASSC_HOST   = 0x000000ff;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: const u_long
9b639cf2d6 2015-05-05        kinaba: 	INADDR_ANY       = 0,
9b639cf2d6 2015-05-05        kinaba: 	INADDR_LOOPBACK  = 0x7F000001,
9b639cf2d6 2015-05-05        kinaba: 	INADDR_BROADCAST = 0xFFFFFFFF,
9b639cf2d6 2015-05-05        kinaba: 	INADDR_NONE      = 0xFFFFFFFF;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: struct SOCKADDR_IN {
9b639cf2d6 2015-05-05        kinaba: 	short   sin_family;
9b639cf2d6 2015-05-05        kinaba: 	u_short sin_port;
9b639cf2d6 2015-05-05        kinaba: 	IN_ADDR sin_addr;
9b639cf2d6 2015-05-05        kinaba: 	char[8] sin_zero;
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: alias SOCKADDR_IN* PSOCKADDR_IN, LPSOCKADDR_IN;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: const size_t
9b639cf2d6 2015-05-05        kinaba: 	WSADESCRIPTION_LEN = 256,
9b639cf2d6 2015-05-05        kinaba: 	WSASYS_STATUS_LEN  = 128;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: struct WSADATA {
9b639cf2d6 2015-05-05        kinaba: 	WORD   wVersion;
9b639cf2d6 2015-05-05        kinaba: 	WORD   wHighVersion;
9b639cf2d6 2015-05-05        kinaba: 	char[WSADESCRIPTION_LEN+1] szDescription;
9b639cf2d6 2015-05-05        kinaba: 	char[WSASYS_STATUS_LEN+1]  szSystemStatus;
9b639cf2d6 2015-05-05        kinaba: 	ushort iMaxSockets;
9b639cf2d6 2015-05-05        kinaba: 	ushort iMaxUdpDg;
9b639cf2d6 2015-05-05        kinaba: 	char*  lpVendorInfo;
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: alias WSADATA* LPWSADATA;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: // This is not documented on the MSDN site
9b639cf2d6 2015-05-05        kinaba: const IP_OPTIONS = 1;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: const int
9b639cf2d6 2015-05-05        kinaba: 	SO_DEBUG       =   1,
9b639cf2d6 2015-05-05        kinaba: 	SO_ACCEPTCONN  =   2,
9b639cf2d6 2015-05-05        kinaba: 	SO_REUSEADDR   =   4,
9b639cf2d6 2015-05-05        kinaba: 	SO_KEEPALIVE   =   8,
9b639cf2d6 2015-05-05        kinaba: 	SO_DONTROUTE   =  16,
9b639cf2d6 2015-05-05        kinaba: 	SO_BROADCAST   =  32,
9b639cf2d6 2015-05-05        kinaba: 	SO_USELOOPBACK =  64,
9b639cf2d6 2015-05-05        kinaba: 	SO_LINGER      = 128,
9b639cf2d6 2015-05-05        kinaba: 	SO_OOBINLINE   = 256,
9b639cf2d6 2015-05-05        kinaba: 	SO_DONTLINGER  = ~SO_LINGER;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: enum : int {
9b639cf2d6 2015-05-05        kinaba: 	SO_SNDBUF = 0x1001,
9b639cf2d6 2015-05-05        kinaba: 	SO_RCVBUF,
9b639cf2d6 2015-05-05        kinaba: 	SO_SNDLOWAT,
9b639cf2d6 2015-05-05        kinaba: 	SO_RCVLOWAT,
9b639cf2d6 2015-05-05        kinaba: 	SO_SNDTIMEO,
9b639cf2d6 2015-05-05        kinaba: 	SO_RCVTIMEO,
9b639cf2d6 2015-05-05        kinaba: 	SO_ERROR,
9b639cf2d6 2015-05-05        kinaba: 	SO_TYPE // = 0x1008
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: /*
9b639cf2d6 2015-05-05        kinaba:  * Note that the next 5 IP defines are specific to WinSock 1.1 (wsock32.dll).
9b639cf2d6 2015-05-05        kinaba:  * They will cause errors or unexpected results if used with the
9b639cf2d6 2015-05-05        kinaba:  * (gs)etsockopts exported from the WinSock 2 lib, ws2_32.dll. Refer ws2tcpip.h.
9b639cf2d6 2015-05-05        kinaba:  */
9b639cf2d6 2015-05-05        kinaba: enum : int {
9b639cf2d6 2015-05-05        kinaba: 	IP_MULTICAST_IF = 2,
9b639cf2d6 2015-05-05        kinaba: 	IP_MULTICAST_TTL,
9b639cf2d6 2015-05-05        kinaba: 	IP_MULTICAST_LOOP,
9b639cf2d6 2015-05-05        kinaba: 	IP_ADD_MEMBERSHIP,
9b639cf2d6 2015-05-05        kinaba: 	IP_DROP_MEMBERSHIP
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: // These are not documented on the MSDN site
9b639cf2d6 2015-05-05        kinaba: const IP_DEFAULT_MULTICAST_TTL  =  1;
9b639cf2d6 2015-05-05        kinaba: const IP_DEFAULT_MULTICAST_LOOP =  1;
9b639cf2d6 2015-05-05        kinaba: const IP_MAX_MEMBERSHIPS        = 20;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: struct ip_mreq {
9b639cf2d6 2015-05-05        kinaba: 	IN_ADDR imr_multiaddr;
9b639cf2d6 2015-05-05        kinaba: 	IN_ADDR imr_interface;
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: const SOCKET INVALID_SOCKET = uint.max;
9b639cf2d6 2015-05-05        kinaba: const int SOCKET_ERROR = -1;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: enum : int {
9b639cf2d6 2015-05-05        kinaba: 	SOCK_STREAM = 1,
9b639cf2d6 2015-05-05        kinaba: 	SOCK_DGRAM,
9b639cf2d6 2015-05-05        kinaba: 	SOCK_RAW,
9b639cf2d6 2015-05-05        kinaba: 	SOCK_RDM,
9b639cf2d6 2015-05-05        kinaba: 	SOCK_SEQPACKET
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: const int TCP_NODELAY = 1;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: enum : int {
9b639cf2d6 2015-05-05        kinaba: 	AF_UNSPEC,
9b639cf2d6 2015-05-05        kinaba: 	AF_UNIX,
9b639cf2d6 2015-05-05        kinaba: 	AF_INET,
9b639cf2d6 2015-05-05        kinaba: 	AF_IMPLINK,
9b639cf2d6 2015-05-05        kinaba: 	AF_PUP,
9b639cf2d6 2015-05-05        kinaba: 	AF_CHAOS,
9b639cf2d6 2015-05-05        kinaba: 	AF_IPX,  // =  6
9b639cf2d6 2015-05-05        kinaba: 	AF_NS       =  6,
9b639cf2d6 2015-05-05        kinaba: 	AF_ISO,
9b639cf2d6 2015-05-05        kinaba: 	AF_OSI      = AF_ISO,
9b639cf2d6 2015-05-05        kinaba: 	AF_ECMA,
9b639cf2d6 2015-05-05        kinaba: 	AF_DATAKIT,
9b639cf2d6 2015-05-05        kinaba: 	AF_CCITT,
9b639cf2d6 2015-05-05        kinaba: 	AF_SNA,
9b639cf2d6 2015-05-05        kinaba: 	AF_DECnet,
9b639cf2d6 2015-05-05        kinaba: 	AF_DLI,
9b639cf2d6 2015-05-05        kinaba: 	AF_LAT,
9b639cf2d6 2015-05-05        kinaba: 	AF_HYLINK,
9b639cf2d6 2015-05-05        kinaba: 	AF_APPLETALK,
9b639cf2d6 2015-05-05        kinaba: 	AF_NETBIOS,
9b639cf2d6 2015-05-05        kinaba: 	AF_VOICEVIEW,
9b639cf2d6 2015-05-05        kinaba: 	AF_FIREFOX,
9b639cf2d6 2015-05-05        kinaba: 	AF_UNKNOWN1,
9b639cf2d6 2015-05-05        kinaba: 	AF_BAN,
9b639cf2d6 2015-05-05        kinaba: 	AF_ATM,
9b639cf2d6 2015-05-05        kinaba: 	AF_INET6,
9b639cf2d6 2015-05-05        kinaba: 	AF_MAX  // = 24
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: struct SOCKADDR {
9b639cf2d6 2015-05-05        kinaba: 	u_short  sa_family;
9b639cf2d6 2015-05-05        kinaba: 	char[14] sa_data;
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: alias SOCKADDR* PSOCKADDR, LPSOCKADDR;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: struct sockproto {
9b639cf2d6 2015-05-05        kinaba: 	u_short sp_family;
9b639cf2d6 2015-05-05        kinaba: 	u_short sp_protocol;
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: enum : int {
9b639cf2d6 2015-05-05        kinaba: 	PF_UNSPEC    = AF_UNSPEC,
9b639cf2d6 2015-05-05        kinaba: 	PF_UNIX      = AF_UNIX,
9b639cf2d6 2015-05-05        kinaba: 	PF_INET      = AF_INET,
9b639cf2d6 2015-05-05        kinaba: 	PF_IMPLINK   = AF_IMPLINK,
9b639cf2d6 2015-05-05        kinaba: 	PF_PUP       = AF_PUP,
9b639cf2d6 2015-05-05        kinaba: 	PF_CHAOS     = AF_CHAOS,
9b639cf2d6 2015-05-05        kinaba: 	PF_NS        = AF_NS,
9b639cf2d6 2015-05-05        kinaba: 	PF_IPX       = AF_IPX,
9b639cf2d6 2015-05-05        kinaba: 	PF_ISO       = AF_ISO,
9b639cf2d6 2015-05-05        kinaba: 	PF_OSI       = AF_OSI,
9b639cf2d6 2015-05-05        kinaba: 	PF_ECMA      = AF_ECMA,
9b639cf2d6 2015-05-05        kinaba: 	PF_DATAKIT   = AF_DATAKIT,
9b639cf2d6 2015-05-05        kinaba: 	PF_CCITT     = AF_CCITT,
9b639cf2d6 2015-05-05        kinaba: 	PF_SNA       = AF_SNA,
9b639cf2d6 2015-05-05        kinaba: 	PF_DECnet    = AF_DECnet,
9b639cf2d6 2015-05-05        kinaba: 	PF_DLI       = AF_DLI,
9b639cf2d6 2015-05-05        kinaba: 	PF_LAT       = AF_LAT,
9b639cf2d6 2015-05-05        kinaba: 	PF_HYLINK    = AF_HYLINK,
9b639cf2d6 2015-05-05        kinaba: 	PF_APPLETALK = AF_APPLETALK,
9b639cf2d6 2015-05-05        kinaba: 	PF_VOICEVIEW = AF_VOICEVIEW,
9b639cf2d6 2015-05-05        kinaba: 	PF_FIREFOX   = AF_FIREFOX,
9b639cf2d6 2015-05-05        kinaba: 	PF_UNKNOWN1  = AF_UNKNOWN1,
9b639cf2d6 2015-05-05        kinaba: 	PF_BAN       = AF_BAN,
9b639cf2d6 2015-05-05        kinaba: 	PF_ATM       = AF_ATM,
9b639cf2d6 2015-05-05        kinaba: 	PF_INET6     = AF_INET6,
9b639cf2d6 2015-05-05        kinaba: 	PF_MAX       = AF_MAX
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: const int SOL_SOCKET = 0xFFFF;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: const int SOMAXCONN = 5;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: const int
9b639cf2d6 2015-05-05        kinaba: 	MSG_OOB       = 1,
9b639cf2d6 2015-05-05        kinaba: 	MSG_PEEK      = 2,
9b639cf2d6 2015-05-05        kinaba: 	MSG_DONTROUTE = 4,
9b639cf2d6 2015-05-05        kinaba: 	MSG_MAXIOVLEN = 16,
9b639cf2d6 2015-05-05        kinaba: 	MSG_PARTIAL   = 0x8000;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: const size_t MAXGETHOSTSTRUCT = 1024;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: const int
9b639cf2d6 2015-05-05        kinaba: 	FD_READ    =  1,
9b639cf2d6 2015-05-05        kinaba: 	FD_WRITE   =  2,
9b639cf2d6 2015-05-05        kinaba: 	FD_OOB     =  4,
9b639cf2d6 2015-05-05        kinaba: 	FD_ACCEPT  =  8,
9b639cf2d6 2015-05-05        kinaba: 	FD_CONNECT = 16,
9b639cf2d6 2015-05-05        kinaba: 	FD_CLOSE   = 32;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: enum : int {
9b639cf2d6 2015-05-05        kinaba: 	WSABASEERR         = 10000,
9b639cf2d6 2015-05-05        kinaba: 	WSAEINTR           = 10004,
9b639cf2d6 2015-05-05        kinaba: 	WSAEBADF           = 10009,
9b639cf2d6 2015-05-05        kinaba: 	WSAEACCES          = 10013,
9b639cf2d6 2015-05-05        kinaba: 	WSAEFAULT          = 10014,
9b639cf2d6 2015-05-05        kinaba: 	WSAEINVAL          = 10022,
9b639cf2d6 2015-05-05        kinaba: 	WSAEMFILE          = 10024,
9b639cf2d6 2015-05-05        kinaba: 	WSAEWOULDBLOCK     = 10035,
9b639cf2d6 2015-05-05        kinaba: 	WSAEINPROGRESS     = 10036,
9b639cf2d6 2015-05-05        kinaba: 	WSAEALREADY        = 10037,
9b639cf2d6 2015-05-05        kinaba: 	WSAENOTSOCK        = 10038,
9b639cf2d6 2015-05-05        kinaba: 	WSAEDESTADDRREQ    = 10039,
9b639cf2d6 2015-05-05        kinaba: 	WSAEMSGSIZE        = 10040,
9b639cf2d6 2015-05-05        kinaba: 	WSAEPROTOTYPE      = 10041,
9b639cf2d6 2015-05-05        kinaba: 	WSAENOPROTOOPT     = 10042,
9b639cf2d6 2015-05-05        kinaba: 	WSAEPROTONOSUPPORT = 10043,
9b639cf2d6 2015-05-05        kinaba: 	WSAESOCKTNOSUPPORT = 10044,
9b639cf2d6 2015-05-05        kinaba: 	WSAEOPNOTSUPP      = 10045,
9b639cf2d6 2015-05-05        kinaba: 	WSAEPFNOSUPPORT    = 10046,
9b639cf2d6 2015-05-05        kinaba: 	WSAEAFNOSUPPORT    = 10047,
9b639cf2d6 2015-05-05        kinaba: 	WSAEADDRINUSE      = 10048,
9b639cf2d6 2015-05-05        kinaba: 	WSAEADDRNOTAVAIL   = 10049,
9b639cf2d6 2015-05-05        kinaba: 	WSAENETDOWN        = 10050,
9b639cf2d6 2015-05-05        kinaba: 	WSAENETUNREACH     = 10051,
9b639cf2d6 2015-05-05        kinaba: 	WSAENETRESET       = 10052,
9b639cf2d6 2015-05-05        kinaba: 	WSAECONNABORTED    = 10053,
9b639cf2d6 2015-05-05        kinaba: 	WSAECONNRESET      = 10054,
9b639cf2d6 2015-05-05        kinaba: 	WSAENOBUFS         = 10055,
9b639cf2d6 2015-05-05        kinaba: 	WSAEISCONN         = 10056,
9b639cf2d6 2015-05-05        kinaba: 	WSAENOTCONN        = 10057,
9b639cf2d6 2015-05-05        kinaba: 	WSAESHUTDOWN       = 10058,
9b639cf2d6 2015-05-05        kinaba: 	WSAETOOMANYREFS    = 10059,
9b639cf2d6 2015-05-05        kinaba: 	WSAETIMEDOUT       = 10060,
9b639cf2d6 2015-05-05        kinaba: 	WSAECONNREFUSED    = 10061,
9b639cf2d6 2015-05-05        kinaba: 	WSAELOOP           = 10062,
9b639cf2d6 2015-05-05        kinaba: 	WSAENAMETOOLONG    = 10063,
9b639cf2d6 2015-05-05        kinaba: 	WSAEHOSTDOWN       = 10064,
9b639cf2d6 2015-05-05        kinaba: 	WSAEHOSTUNREACH    = 10065,
9b639cf2d6 2015-05-05        kinaba: 	WSAENOTEMPTY       = 10066,
9b639cf2d6 2015-05-05        kinaba: 	WSAEPROCLIM        = 10067,
9b639cf2d6 2015-05-05        kinaba: 	WSAEUSERS          = 10068,
9b639cf2d6 2015-05-05        kinaba: 	WSAEDQUOT          = 10069,
9b639cf2d6 2015-05-05        kinaba: 	WSAESTALE          = 10070,
9b639cf2d6 2015-05-05        kinaba: 	WSAEREMOTE         = 10071,
9b639cf2d6 2015-05-05        kinaba: 	WSAEDISCON         = 10101,
9b639cf2d6 2015-05-05        kinaba: 	WSASYSNOTREADY     = 10091,
9b639cf2d6 2015-05-05        kinaba: 	WSAVERNOTSUPPORTED = 10092,
9b639cf2d6 2015-05-05        kinaba: 	WSANOTINITIALISED  = 10093,
9b639cf2d6 2015-05-05        kinaba: 	WSAHOST_NOT_FOUND  = 11001,
9b639cf2d6 2015-05-05        kinaba: 	WSATRY_AGAIN       = 11002,
9b639cf2d6 2015-05-05        kinaba: 	WSANO_RECOVERY     = 11003,
9b639cf2d6 2015-05-05        kinaba: 	WSANO_DATA         = 11004,
9b639cf2d6 2015-05-05        kinaba: 	WSANO_ADDRESS      = WSANO_DATA
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: alias WSAGetLastError h_errno;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: enum : int {
9b639cf2d6 2015-05-05        kinaba: 	HOST_NOT_FOUND = WSAHOST_NOT_FOUND,
9b639cf2d6 2015-05-05        kinaba: 	TRY_AGAIN      = WSATRY_AGAIN,
9b639cf2d6 2015-05-05        kinaba: 	NO_RECOVERY    = WSANO_RECOVERY,
9b639cf2d6 2015-05-05        kinaba: 	NO_DATA        = WSANO_DATA,
9b639cf2d6 2015-05-05        kinaba: 	NO_ADDRESS     = WSANO_ADDRESS
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: extern (Pascal) {
9b639cf2d6 2015-05-05        kinaba: 	SOCKET accept(SOCKET, SOCKADDR*, int*);
9b639cf2d6 2015-05-05        kinaba: 	int bind(SOCKET, const(SOCKADDR)*, int);
9b639cf2d6 2015-05-05        kinaba: 	int closesocket(SOCKET);
9b639cf2d6 2015-05-05        kinaba: 	int connect(SOCKET, const(SOCKADDR)*, int);
9b639cf2d6 2015-05-05        kinaba: 	int ioctlsocket(SOCKET, int, u_long*);
9b639cf2d6 2015-05-05        kinaba: 	int getpeername(SOCKET, SOCKADDR*, int*);
9b639cf2d6 2015-05-05        kinaba: 	int getsockname(SOCKET, SOCKADDR*, int*);
9b639cf2d6 2015-05-05        kinaba: 	int getsockopt(SOCKET, int, int, char*, int*);
9b639cf2d6 2015-05-05        kinaba: 	uint inet_addr(const(char)*);
9b639cf2d6 2015-05-05        kinaba: 	int listen(SOCKET, int);
9b639cf2d6 2015-05-05        kinaba: 	int recv(SOCKET, char*, int, int);
9b639cf2d6 2015-05-05        kinaba: 	int recvfrom(SOCKET, char*, int, int, SOCKADDR*, int*);
9b639cf2d6 2015-05-05        kinaba: 	int send(SOCKET, const(char)*, int, int);
9b639cf2d6 2015-05-05        kinaba: 	int sendto(SOCKET, const(char)*, int, int, const(SOCKADDR)*, int);
9b639cf2d6 2015-05-05        kinaba: 	int setsockopt(SOCKET, int, int, const(char)*, int);
9b639cf2d6 2015-05-05        kinaba: 	int shutdown(SOCKET, int);
9b639cf2d6 2015-05-05        kinaba: 	SOCKET socket(int, int, int);
9b639cf2d6 2015-05-05        kinaba: 	int WSAStartup(WORD, LPWSADATA);
9b639cf2d6 2015-05-05        kinaba: 	int WSACleanup();
9b639cf2d6 2015-05-05        kinaba: 	void WSASetLastError(int);
9b639cf2d6 2015-05-05        kinaba: 	int WSAGetLastError();
9b639cf2d6 2015-05-05        kinaba: 	BOOL WSAIsBlocking();
9b639cf2d6 2015-05-05        kinaba: 	int WSAUnhookBlockingHook();
9b639cf2d6 2015-05-05        kinaba: 	FARPROC WSASetBlockingHook(FARPROC);
9b639cf2d6 2015-05-05        kinaba: 	int WSACancelBlockingCall();
9b639cf2d6 2015-05-05        kinaba: 	HANDLE WSAAsyncGetServByName(HWND, u_int, const(char)*, const(char)*, char*, int);
9b639cf2d6 2015-05-05        kinaba: 	HANDLE WSAAsyncGetServByPort(HWND, u_int, int, const(char)*, char*, int);
9b639cf2d6 2015-05-05        kinaba: 	HANDLE WSAAsyncGetProtoByName(HWND, u_int, const(char)*, char*, int);
9b639cf2d6 2015-05-05        kinaba: 	HANDLE WSAAsyncGetProtoByNumber(HWND, u_int, int, char*, int);
9b639cf2d6 2015-05-05        kinaba: 	HANDLE WSAAsyncGetHostByName(HWND, u_int, const(char)*, char*, int);
9b639cf2d6 2015-05-05        kinaba: 	HANDLE WSAAsyncGetHostByAddr(HWND, u_int, const(char)*, int, int, char*, int);
9b639cf2d6 2015-05-05        kinaba: 	int WSACancelAsyncRequest(HANDLE);
9b639cf2d6 2015-05-05        kinaba: 	int WSAAsyncSelect(SOCKET, HWND, u_int, int);
9b639cf2d6 2015-05-05        kinaba: 	u_long htonl(u_long);
9b639cf2d6 2015-05-05        kinaba: 	u_long ntohl(u_long);
9b639cf2d6 2015-05-05        kinaba: 	u_short htons(u_short);
9b639cf2d6 2015-05-05        kinaba: 	u_short ntohs(u_short);
9b639cf2d6 2015-05-05        kinaba: 	int select(int nfds, FD_SET*, FD_SET*, FD_SET*, const(TIMEVAL)*);
9b639cf2d6 2015-05-05        kinaba: 	int gethostname(char*, int);
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: extern (Windows) {
9b639cf2d6 2015-05-05        kinaba: 	char* inet_ntoa(IN_ADDR);
9b639cf2d6 2015-05-05        kinaba: 	HOSTENT* gethostbyaddr(const(char)*, int, int);
9b639cf2d6 2015-05-05        kinaba: 	HOSTENT* gethostbyname(const(char)*);
9b639cf2d6 2015-05-05        kinaba: 	SERVENT* getservbyport(int, const(char)*);
9b639cf2d6 2015-05-05        kinaba: 	SERVENT* getservbyname(const(char)*, const(char)*);
9b639cf2d6 2015-05-05        kinaba: 	PROTOENT* getprotobynumber(int);
9b639cf2d6 2015-05-05        kinaba: 	PROTOENT* getprotobyname(const(char)*);
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: alias MAKELONG WSAMAKEASYNCREPLY, WSAMAKESELECTREPLY;
9b639cf2d6 2015-05-05        kinaba: alias LOWORD WSAGETASYNCBUFLEN, WSAGETSELECTEVENT;
9b639cf2d6 2015-05-05        kinaba: alias HIWORD WSAGETASYNCERROR, WSAGETSELECTERROR;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: /*
9b639cf2d6 2015-05-05        kinaba:  * Recent MSDN docs indicate that the MS-specific extensions exported from
9b639cf2d6 2015-05-05        kinaba:  * mswsock.dll (AcceptEx, TransmitFile. WSARecEx and GetAcceptExSockaddrs) are
9b639cf2d6 2015-05-05        kinaba:  * declared in mswsock.h. These extensions are not supported on W9x or WinCE.
9b639cf2d6 2015-05-05        kinaba:  * However, code using WinSock 1.1 API may expect the declarations and
9b639cf2d6 2015-05-05        kinaba:  * associated defines to be in this header. Thus we include mswsock.h here.
9b639cf2d6 2015-05-05        kinaba:  *
9b639cf2d6 2015-05-05        kinaba:  * When linking against the WinSock 1.1 lib, wsock32.dll, the mswsock functions
9b639cf2d6 2015-05-05        kinaba:  * are automatically routed to mswsock.dll (on platforms with support).
9b639cf2d6 2015-05-05        kinaba:  * The WinSock 2 lib, ws2_32.dll, does not contain any references to
9b639cf2d6 2015-05-05        kinaba:  * the mswsock extensions.
9b639cf2d6 2015-05-05        kinaba:  */
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: import win32.mswsock;