1 /** 2 * Windows API header module 3 * 4 * Translated from MinGW Windows headers 5 * 6 * Authors: Daniel Keep 7 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) 8 * Source: $(DRUNTIMESRC core/sys/windows/_mswsock.d) 9 */ 10 /// Automatically imported and edited from the druntime module 11 /// core.sys.windows.mswsock for the auto-generated win32 package. 12 module win32.mswsock; 13 //version (Windows): 14 @system: 15 16 import win32.winbase, win32.windef; 17 import win32.basetyps, win32.w32api; 18 19 import win32.winsock2; 20 21 //static if (_WIN32_WINNT >= 0x500) { 22 enum { 23 /* WinNT5+: 24 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/socket_options.htm */ 25 SO_MAXDG = 0x7009, 26 SO_MAXPATHDG = 0x700A, 27 } 28 //} 29 30 enum { 31 /* WinNT4+: 32 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/socket_options_for_windows_nt_4_0_2.htm */ 33 SO_CONNDATA = 0x7000, 34 SO_CONNOPT = 0x7001, 35 SO_DISCDATA = 0x7002, 36 SO_DISCOPT = 0x7003, 37 SO_CONNDATALEN = 0x7004, 38 SO_CONNOPTLEN = 0x7005, 39 SO_DISCDATALEN = 0x7006, 40 SO_DISCOPTLEN = 0x7007, 41 42 /* WinNT4: 43 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/socket_options.htm */ 44 SO_UPDATE_ACCEPT_CONTENT = 0x700B, 45 } 46 47 enum { 48 /* Win95+, WinNT4+ but apparently shouldn't used: mark as deprecated? 49 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/socket_options.htm */ 50 SO_OPENTYPE = 0x7008, 51 52 /* Win95+; these two are passed to the SO_OPENTYPE option as arguments, 53 so would they be deprecated as well? 54 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/socket_options.htm */ 55 SO_SYNCHRONOUS_ALERT = 0x0010, 56 SO_SYNCHRONOUS_NONALERT = 0x0020, 57 58 /* Win95: 59 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/socket_options.htm */ 60 SO_CONNECT_TIME = 0x700C, 61 } 62 63 64 enum { 65 TCP_BSDURGENT = 0x7000, 66 } 67 68 /* These *appear* to be constants for passing to the TransmitFile / 69 TransmitPackets functions, which are available in WinNT3.51+ 70 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/transmitfile_2.htm */ 71 enum { 72 TF_DISCONNECT = 1, 73 TF_REUSE_SOCKET = 2, 74 TF_WRITE_BEHIND = 4, 75 TF_USE_DEFAULT_WORKER = 0, 76 TF_USE_SYSTEM_THREAD = 16, 77 TF_USE_KERNEL_APC = 32 78 } 79 80 /* Win95+, WinNT3.51+ 81 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/transmit_file_buffers_2.htm */ 82 struct TRANSMIT_FILE_BUFFERS { 83 PVOID Head; 84 DWORD HeadLength; 85 PVOID Tail; 86 DWORD TailLength; 87 } 88 alias TRANSMIT_FILE_BUFFERS* PTRANSMIT_FILE_BUFFERS, LPTRANSMIT_FILE_BUFFERS; 89 90 extern(Windows) { 91 /* Win95+, WinNT3.51+ 92 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/wsarecvex_2.htm */ 93 int WSARecvEx(SOCKET, char*, int, int*); 94 95 /* Win95+, WinNT3.51+ 96 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/getacceptexSOCKADDRs_2.htm */ 97 VOID GetAcceptExSockaddrs(PVOID, DWORD, DWORD, DWORD, SOCKADDR**, LPINT, SOCKADDR**, LPINT); 98 99 /* WinNT3.51+ 100 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/transmitfile_2.htm */ 101 BOOL TransmitFile(SOCKET, HANDLE, DWORD, DWORD, LPOVERLAPPED, LPTRANSMIT_FILE_BUFFERS, DWORD); 102 103 /* WinNT3.51+ 104 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/acceptex_2.htm */ 105 alias BOOL function(SOCKET, SOCKET, PVOID, DWORD, DWORD, DWORD, LPDWORD, LPOVERLAPPED) LPFN_ACCEPTEX; 106 const GUID WSAID_ACCEPTEX = {0xb5367df1,0xcbac,0x11cf,[0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92]}; 107 108 alias BOOL function(SOCKET, SOCKADDR*, int, PVOID, DWORD, LPDWORD, LPOVERLAPPED) LPFN_CONNECTEX; 109 const GUID WSAID_CONNECTEX = {0x25a207b9,0xddf3,0x4660,[0x8e,0xe9,0x76,0xe5,0x8c,0x74,0x06,0x3e]}; 110 } 111 112 static if (_WIN32_WINNT >= 0x501) { 113 /* These appear to be constants for the TRANSMIT_PACKETS_ELEMENT 114 * structure below, so I've given them the same minimum version 115 */ 116 enum { 117 TP_ELEMENT_FILE = 1, 118 TP_ELEMENT_MEMORY = 2, 119 TP_ELEMENT_EOP = 4 120 } 121 122 /* WinXP+, Srv2k3+ 123 * ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/transmit_packets_element_2.htm 124 */ 125 struct TRANSMIT_PACKETS_ELEMENT { 126 ULONG dwElFlags; 127 ULONG cLength; 128 union { 129 struct { 130 LARGE_INTEGER nFileOffset; 131 HANDLE hFile; 132 } 133 PVOID pBuffer; 134 } 135 } 136 137 struct WSABUF { 138 ULONG len; 139 CHAR* buf; 140 } 141 142 alias WSABUF* LPWSABUF; 143 144 /* WinXP+, Server2003+: 145 * ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/wsamsg_2.htm 146 */ 147 struct WSAMSG { 148 LPSOCKADDR name; 149 INT namelen; 150 LPWSABUF lpBuffers; 151 DWORD dwBufferCount; 152 WSABUF Control; 153 DWORD dwFlags; 154 } 155 156 alias WSAMSG* PWSAMSG, LPWSAMSG; 157 158 /* According to MSDN docs, the WSAMSG.Control buffer starts with a 159 cmsghdr header of the following form. See also RFC 2292. */ 160 /* DK: Confirmed. So I suppose these should get the same version as 161 WSAMSG... */ 162 struct WSACMSGHDR { 163 SIZE_T cmsg_len; 164 INT cmsg_level; 165 INT cmsg_type; 166 // followed by UCHAR cmsg_data[]; 167 } 168 } 169 170 static if (_WIN32_WINNT >= 0x600) { 171 /* TODO: Standard Posix.1g macros as per RFC 2292, with WSA_uglification. */ 172 /* DK: MinGW doesn't define these, and neither does the MSDN docs. Might have 173 to actually look up RFC 2292... */ 174 /+ 175 #if 0 176 #define WSA_CMSG_FIRSTHDR(mhdr) 177 #define WSA_CMSG_NXTHDR(mhdr, cmsg) 178 #define WSA_CMSG_SPACE(length) 179 #define WSA_CMSG_LEN(length) 180 #endif 181 +/ 182 183 /* Win Vista+, Srv2k3+ 184 * ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/disconnectex_2.htm 185 */ 186 extern(Windows) BOOL DisconnectEx(SOCKET, LPOVERLAPPED, DWORD, DWORD); 187 } 188 189 static if (_WIN32_WINNT >= 0x501) { 190 /* WinXP+, Srv2k3+ 191 * ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/wsarecvmsg_2.htm 192 */ 193 extern(Windows) int WSARecvMsg(SOCKET, LPWSAMSG, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); 194 }