33 #ifdef MHD_WINSOCK_SOCKETS 40 const char* MHD_W32_strerror_winsock_(
int err)
46 case WSA_INVALID_HANDLE:
47 return "Specified event object handle is invalid";
48 case WSA_NOT_ENOUGH_MEMORY:
49 return "Insufficient memory available";
50 case WSA_INVALID_PARAMETER:
51 return "One or more parameters are invalid";
52 case WSA_OPERATION_ABORTED:
53 return "Overlapped operation aborted";
54 case WSA_IO_INCOMPLETE:
55 return "Overlapped I/O event object not in signaled state";
57 return "Overlapped operations will complete later";
59 return "Interrupted function call";
61 return "File handle is not valid";
63 return "Permission denied";
67 return "Invalid argument";
69 return "Too many open files";
71 return "Resource temporarily unavailable";
73 return "Operation now in progress";
75 return "Operation already in progress";
77 return "Socket operation on nonsocket";
79 return "Destination address required";
81 return "Message too long";
83 return "Protocol wrong type for socket";
85 return "Bad protocol option";
86 case WSAEPROTONOSUPPORT:
87 return "Protocol not supported";
88 case WSAESOCKTNOSUPPORT:
89 return "Socket type not supported";
91 return "Operation not supported";
93 return "Protocol family not supported";
95 return "Address family not supported by protocol family";
97 return "Address already in use";
98 case WSAEADDRNOTAVAIL:
99 return "Cannot assign requested address";
101 return "Network is down";
103 return "Network is unreachable";
105 return "Network dropped connection on reset";
106 case WSAECONNABORTED:
107 return "Software caused connection abort";
109 return "Connection reset by peer";
111 return "No buffer space available";
113 return "Socket is already connected";
115 return "Socket is not connected";
117 return "Cannot send after socket shutdown";
118 case WSAETOOMANYREFS:
119 return "Too many references";
121 return "Connection timed out";
122 case WSAECONNREFUSED:
123 return "Connection refused";
125 return "Cannot translate name";
126 case WSAENAMETOOLONG:
127 return "Name too long";
129 return "Host is down";
130 case WSAEHOSTUNREACH:
131 return "No route to host";
133 return "Directory not empty";
135 return "Too many processes";
137 return "User quota exceeded";
139 return "Disk quota exceeded";
141 return "Stale file handle reference";
143 return "Item is remote";
145 return "Network subsystem is unavailable";
146 case WSAVERNOTSUPPORTED:
147 return "Winsock.dll version out of range";
148 case WSANOTINITIALISED:
149 return "Successful WSAStartup not yet performed";
151 return "Graceful shutdown in progress";
153 return "No more results";
155 return "Call has been canceled";
156 case WSAEINVALIDPROCTABLE:
157 return "Procedure call table is invalid";
158 case WSAEINVALIDPROVIDER:
159 return "Service provider is invalid";
160 case WSAEPROVIDERFAILEDINIT:
161 return "Service provider failed to initialize";
162 case WSASYSCALLFAILURE:
163 return "System call failure";
164 case WSASERVICE_NOT_FOUND:
165 return "Service not found";
166 case WSATYPE_NOT_FOUND:
167 return "Class type not found";
169 return "No more results";
170 case WSA_E_CANCELLED:
171 return "Call was canceled";
173 return "Database query was refused";
174 case WSAHOST_NOT_FOUND:
175 return "Host not found";
177 return "Nonauthoritative host not found";
179 return "This is a nonrecoverable error";
181 return "Valid name, no data record of requested type";
182 case WSA_QOS_RECEIVERS:
183 return "QoS receivers";
184 case WSA_QOS_SENDERS:
185 return "QoS senders";
186 case WSA_QOS_NO_SENDERS:
187 return "No QoS senders";
188 case WSA_QOS_NO_RECEIVERS:
189 return "QoS no receivers";
190 case WSA_QOS_REQUEST_CONFIRMED:
191 return "QoS request confirmed";
192 case WSA_QOS_ADMISSION_FAILURE:
193 return "QoS admission error";
194 case WSA_QOS_POLICY_FAILURE:
195 return "QoS policy failure";
196 case WSA_QOS_BAD_STYLE:
197 return "QoS bad style";
198 case WSA_QOS_BAD_OBJECT:
199 return "QoS bad object";
200 case WSA_QOS_TRAFFIC_CTRL_ERROR:
201 return "QoS traffic control error";
202 case WSA_QOS_GENERIC_ERROR:
203 return "QoS generic error";
204 case WSA_QOS_ESERVICETYPE:
205 return "QoS service type error";
206 case WSA_QOS_EFLOWSPEC:
207 return "QoS flowspec error";
208 case WSA_QOS_EPROVSPECBUF:
209 return "Invalid QoS provider buffer";
210 case WSA_QOS_EFILTERSTYLE:
211 return "Invalid QoS filter style";
212 case WSA_QOS_EFILTERTYPE:
213 return "Invalid QoS filter type";
214 case WSA_QOS_EFILTERCOUNT:
215 return "Incorrect QoS filter count";
216 case WSA_QOS_EOBJLENGTH:
217 return "Invalid QoS object length";
218 case WSA_QOS_EFLOWCOUNT:
219 return "Incorrect QoS flow count";
220 case WSA_QOS_EUNKOWNPSOBJ:
221 return "Unrecognized QoS object";
222 case WSA_QOS_EPOLICYOBJ:
223 return "Invalid QoS policy object";
224 case WSA_QOS_EFLOWDESC:
225 return "Invalid QoS flow descriptor";
226 case WSA_QOS_EPSFLOWSPEC:
227 return "Invalid QoS provider-specific flowspec";
228 case WSA_QOS_EPSFILTERSPEC:
229 return "Invalid QoS provider-specific filterspec";
230 case WSA_QOS_ESDMODEOBJ:
231 return "Invalid QoS shape discard mode object";
232 case WSA_QOS_ESHAPERATEOBJ:
233 return "Invalid QoS shaping rate object";
234 case WSA_QOS_RESERVED_PETYPE:
235 return "Reserved policy QoS element type";
237 return "Unknown winsock error";
249 MHD_W32_socket_pair_(SOCKET sockets_pair[2],
int non_blk)
255 WSASetLastError (WSAEFAULT);
259 #define PAIRMAXTRYIES 800 260 for (i = 0; i < PAIRMAXTRYIES; i++)
262 struct sockaddr_in listen_addr;
264 static const int c_addinlen =
sizeof(
struct sockaddr_in);
265 int addr_len = c_addinlen;
266 unsigned long on_val = 1;
267 unsigned long off_val = 0;
269 listen_s = socket (AF_INET,
272 if (INVALID_SOCKET == listen_s)
275 listen_addr.sin_family = AF_INET;
276 listen_addr.sin_port = 0;
277 listen_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
278 if ( (0 == bind (listen_s,
279 (
struct sockaddr*) &listen_addr,
281 (0 == listen (listen_s,
283 (0 == getsockname (listen_s,
284 (
struct sockaddr*) &listen_addr,
287 SOCKET client_s = socket(AF_INET,
290 struct sockaddr_in accepted_from_addr;
291 struct sockaddr_in client_addr;
294 if (INVALID_SOCKET == client_s)
297 closesocket (listen_s);
301 if ( (0 != ioctlsocket (client_s,
304 ( (0 != connect (client_s,
305 (
struct sockaddr*) &listen_addr,
307 (WSAGetLastError() != WSAEWOULDBLOCK)) )
310 closesocket (listen_s);
311 closesocket (client_s);
315 addr_len = c_addinlen;
316 server_s = accept (listen_s,
317 (
struct sockaddr*) &accepted_from_addr,
319 if (INVALID_SOCKET == server_s)
322 closesocket (listen_s);
323 closesocket (client_s);
327 addr_len = c_addinlen;
328 if ( (0 == getsockname (client_s,
329 (
struct sockaddr*) &client_addr,
331 (accepted_from_addr.sin_family == client_addr.sin_family) &&
332 (accepted_from_addr.sin_port == client_addr.sin_port) &&
333 (accepted_from_addr.sin_addr.s_addr == client_addr.sin_addr.s_addr) &&
335 (0 == ioctlsocket(server_s,
338 (0 == ioctlsocket(client_s,
342 closesocket (listen_s);
343 sockets_pair[0] = server_s;
344 sockets_pair[1] = client_s;
347 closesocket (server_s);
348 closesocket (client_s);
350 closesocket(listen_s);
353 sockets_pair[0] = INVALID_SOCKET;
354 sockets_pair[1] = INVALID_SOCKET;
355 WSASetLastError(WSAECONNREFUSED);
377 unsigned int fd_setsize)
379 if ( (
NULL ==
set) ||
389 if ( (
NULL != max_fd) &&
406 #if defined(MHD_POSIX_SOCKETS) 414 if ( ((flags | O_NONBLOCK) != flags) &&
417 flags | O_NONBLOCK)) )
419 #elif defined(MHD_WINSOCK_SOCKETS) 420 unsigned long flags = 1;
422 if (0 != ioctlsocket (sock,
441 #if defined(MHD_POSIX_SOCKETS) 449 if ( ((flags | FD_CLOEXEC) != flags) &&
452 flags | FD_CLOEXEC)) )
454 #elif defined(MHD_WINSOCK_SOCKETS) 455 if (! SetHandleInformation ((HANDLE)sock,
478 domain = (use_ipv6) ? PF_INET6 : PF_INET;
485 #if defined(MHD_POSIX_SOCKETS) && defined(SOCK_CLOEXEC) 487 SOCK_STREAM | SOCK_CLOEXEC,
490 #elif defined(MHD_WINSOCK_SOCKETS) && defined (WSA_FLAG_NO_HANDLE_INHERIT) 491 fd = WSASocketW (domain,
496 WSA_FLAG_NO_HANDLE_INHERIT);
510 #ifdef MHD_socket_nosignal_ 511 if(! MHD_socket_nosignal_(fd))
int MHD_socket_nonblocking_(MHD_socket sock)
#define MHD_socket_fset_error_(err)
#define MHD_socket_get_error_()
MHD_socket MHD_socket_create_listen_(int use_ipv6)
#define MHD_SCKT_ADD_FD_TO_FDSET_SETSIZE_(fd, pset, setsize)
#define MHD_INVALID_SOCKET
int MHD_add_to_fd_set_(MHD_socket fd, fd_set *set, MHD_socket *max_fd, unsigned int fd_setsize)
int MHD_socket_noninheritable_(MHD_socket sock)
#define MHD_socket_close_(fd)
#define MHD_SCKT_FD_FITS_FDSET_SETSIZE_(fd, pset, setsize)