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