27#ifdef MHD_WINSOCK_SOCKETS
35MHD_W32_strerror_winsock_ (
int err)
41 case WSA_INVALID_HANDLE:
42 return "Specified event object handle is invalid";
43 case WSA_NOT_ENOUGH_MEMORY:
44 return "Insufficient memory available";
45 case WSA_INVALID_PARAMETER:
46 return "One or more parameters are invalid";
47 case WSA_OPERATION_ABORTED:
48 return "Overlapped operation aborted";
49 case WSA_IO_INCOMPLETE:
50 return "Overlapped I/O event object not in signaled state";
52 return "Overlapped operations will complete later";
54 return "Interrupted function call";
56 return "File handle is not valid";
58 return "Permission denied";
62 return "Invalid argument";
64 return "Too many open files";
66 return "Resource temporarily unavailable";
68 return "Operation now in progress";
70 return "Operation already in progress";
72 return "Socket operation on nonsocket";
74 return "Destination address required";
76 return "Message too long";
78 return "Protocol wrong type for socket";
80 return "Bad protocol option";
81 case WSAEPROTONOSUPPORT:
82 return "Protocol not supported";
83 case WSAESOCKTNOSUPPORT:
84 return "Socket type not supported";
86 return "Operation not supported";
88 return "Protocol family not supported";
90 return "Address family not supported by protocol family";
92 return "Address already in use";
93 case WSAEADDRNOTAVAIL:
94 return "Cannot assign requested address";
96 return "Network is down";
98 return "Network is unreachable";
100 return "Network dropped connection on reset";
101 case WSAECONNABORTED:
102 return "Software caused connection abort";
104 return "Connection reset by peer";
106 return "No buffer space available";
108 return "Socket is already connected";
110 return "Socket is not connected";
112 return "Cannot send after socket shutdown";
113 case WSAETOOMANYREFS:
114 return "Too many references";
116 return "Connection timed out";
117 case WSAECONNREFUSED:
118 return "Connection refused";
120 return "Cannot translate name";
121 case WSAENAMETOOLONG:
122 return "Name too long";
124 return "Host is down";
125 case WSAEHOSTUNREACH:
126 return "No route to host";
128 return "Directory not empty";
130 return "Too many processes";
132 return "User quota exceeded";
134 return "Disk quota exceeded";
136 return "Stale file handle reference";
138 return "Item is remote";
140 return "Network subsystem is unavailable";
141 case WSAVERNOTSUPPORTED:
142 return "Winsock.dll version out of range";
143 case WSANOTINITIALISED:
144 return "Successful WSAStartup not yet performed";
146 return "Graceful shutdown in progress";
148 return "No more results";
150 return "Call has been canceled";
151 case WSAEINVALIDPROCTABLE:
152 return "Procedure call table is invalid";
153 case WSAEINVALIDPROVIDER:
154 return "Service provider is invalid";
155 case WSAEPROVIDERFAILEDINIT:
156 return "Service provider failed to initialize";
157 case WSASYSCALLFAILURE:
158 return "System call failure";
159 case WSASERVICE_NOT_FOUND:
160 return "Service not found";
161 case WSATYPE_NOT_FOUND:
162 return "Class type not found";
164 return "No more results";
165 case WSA_E_CANCELLED:
166 return "Call was canceled";
168 return "Database query was refused";
169 case WSAHOST_NOT_FOUND:
170 return "Host not found";
172 return "Nonauthoritative host not found";
174 return "This is a nonrecoverable error";
176 return "Valid name, no data record of requested type";
177 case WSA_QOS_RECEIVERS:
178 return "QoS receivers";
179 case WSA_QOS_SENDERS:
180 return "QoS senders";
181 case WSA_QOS_NO_SENDERS:
182 return "No QoS senders";
183 case WSA_QOS_NO_RECEIVERS:
184 return "QoS no receivers";
185 case WSA_QOS_REQUEST_CONFIRMED:
186 return "QoS request confirmed";
187 case WSA_QOS_ADMISSION_FAILURE:
188 return "QoS admission error";
189 case WSA_QOS_POLICY_FAILURE:
190 return "QoS policy failure";
191 case WSA_QOS_BAD_STYLE:
192 return "QoS bad style";
193 case WSA_QOS_BAD_OBJECT:
194 return "QoS bad object";
195 case WSA_QOS_TRAFFIC_CTRL_ERROR:
196 return "QoS traffic control error";
197 case WSA_QOS_GENERIC_ERROR:
198 return "QoS generic error";
199 case WSA_QOS_ESERVICETYPE:
200 return "QoS service type error";
201 case WSA_QOS_EFLOWSPEC:
202 return "QoS flowspec error";
203 case WSA_QOS_EPROVSPECBUF:
204 return "Invalid QoS provider buffer";
205 case WSA_QOS_EFILTERSTYLE:
206 return "Invalid QoS filter style";
207 case WSA_QOS_EFILTERTYPE:
208 return "Invalid QoS filter type";
209 case WSA_QOS_EFILTERCOUNT:
210 return "Incorrect QoS filter count";
211 case WSA_QOS_EOBJLENGTH:
212 return "Invalid QoS object length";
213 case WSA_QOS_EFLOWCOUNT:
214 return "Incorrect QoS flow count";
215 case WSA_QOS_EUNKOWNPSOBJ:
216 return "Unrecognized QoS object";
217 case WSA_QOS_EPOLICYOBJ:
218 return "Invalid QoS policy object";
219 case WSA_QOS_EFLOWDESC:
220 return "Invalid QoS flow descriptor";
221 case WSA_QOS_EPSFLOWSPEC:
222 return "Invalid QoS provider-specific flowspec";
223 case WSA_QOS_EPSFILTERSPEC:
224 return "Invalid QoS provider-specific filterspec";
225 case WSA_QOS_ESDMODEOBJ:
226 return "Invalid QoS shape discard mode object";
227 case WSA_QOS_ESHAPERATEOBJ:
228 return "Invalid QoS shaping rate object";
229 case WSA_QOS_RESERVED_PETYPE:
230 return "Reserved policy QoS element type";
232 return "Unknown winsock error";
244MHD_W32_socket_pair_ (SOCKET sockets_pair[2],
int non_blk)
250 WSASetLastError (WSAEFAULT);
254#define PAIRMAXTRYIES 800
255 for (i = 0; i < PAIRMAXTRYIES; i++)
257 struct sockaddr_in listen_addr;
259 static const int c_addinlen =
sizeof(
struct sockaddr_in);
260 int addr_len = c_addinlen;
261 unsigned long on_val = 1;
262 unsigned long off_val = 0;
264 listen_s = socket (AF_INET,
267 if (INVALID_SOCKET == listen_s)
270 listen_addr.sin_family = AF_INET;
271 listen_addr.sin_port = 0;
272 listen_addr.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
273 if ( ((0 == bind (listen_s,
274 (
struct sockaddr *) &listen_addr,
276 (0 == listen (listen_s,
278 (0 == getsockname (listen_s,
279 (
struct sockaddr *) &listen_addr,
282 SOCKET client_s = socket (AF_INET,
285 struct sockaddr_in accepted_from_addr;
286 struct sockaddr_in client_addr;
289 if (INVALID_SOCKET == client_s)
292 closesocket (listen_s);
296 if ( (0 != ioctlsocket (client_s,
299 ( (0 != connect (client_s,
300 (
struct sockaddr *) &listen_addr,
302 (WSAGetLastError () != WSAEWOULDBLOCK)) )
305 closesocket (listen_s);
306 closesocket (client_s);
310 addr_len = c_addinlen;
311 server_s = accept (listen_s,
312 (
struct sockaddr *) &accepted_from_addr,
314 if (INVALID_SOCKET == server_s)
317 closesocket (listen_s);
318 closesocket (client_s);
322 addr_len = c_addinlen;
323 if ( (0 == getsockname (client_s,
324 (
struct sockaddr *) &client_addr,
326 (accepted_from_addr.sin_port == client_addr.sin_port) &&
327 (accepted_from_addr.sin_addr.s_addr ==
328 client_addr.sin_addr.s_addr) &&
329 (accepted_from_addr.sin_family == client_addr.sin_family) &&
331 (0 == ioctlsocket (server_s,
334 (0 == ioctlsocket (client_s,
337 (0 == setsockopt (server_s,
340 (const void *) (&on_val),
342 (0 == setsockopt (client_s,
345 (const void *) (&on_val),
348 closesocket (listen_s);
349 sockets_pair[0] = server_s;
350 sockets_pair[1] = client_s;
353 closesocket (server_s);
354 closesocket (client_s);
356 closesocket (listen_s);
359 sockets_pair[0] = INVALID_SOCKET;
360 sockets_pair[1] = INVALID_SOCKET;
361 WSASetLastError (WSAECONNREFUSED);
384 unsigned int fd_setsize)
386 if ( (
NULL == set) ||
396 if ( (
NULL != max_fd) &&
413#if defined(MHD_POSIX_SOCKETS)
421 if ( ((flags | O_NONBLOCK) != flags) &&
424 flags | O_NONBLOCK)) )
426#elif defined(MHD_WINSOCK_SOCKETS)
427 unsigned long flags = 1;
429 if (0 != ioctlsocket (sock,
448#if defined(MHD_POSIX_SOCKETS)
456 if ( ((flags | FD_CLOEXEC) != flags) &&
459 flags | FD_CLOEXEC)) )
461#elif defined(MHD_WINSOCK_SOCKETS)
462 if (! SetHandleInformation ((HANDLE) sock,
489 return setsockopt (sock,
492 (
const void *) ((on) ? &on_val : &off_val),
513#if defined(SOCK_NOSIGPIPE) || defined(MHD_socket_nosignal_)
517#if defined(MHD_POSIX_SOCKETS) && (defined(SOCK_CLOEXEC) || \
518 defined(SOCK_NOSIGPIPE) )
525#if defined(SOCK_NOSIGPIPE) || defined(MHD_socket_nosignal_)
529#elif defined(MHD_WINSOCK_SOCKETS) && defined(WSA_FLAG_NO_HANDLE_INHERIT)
535 WSA_FLAG_OVERLAPPED | WSA_FLAG_NO_HANDLE_INHERIT);
546#if defined(SOCK_NOSIGPIPE) || defined(MHD_socket_nosignal_)
553#if defined(MHD_socket_nosignal_)
554 if ( (! nosigpipe_set) &&
555 (0 == MHD_socket_nosignal_ (
fd)) &&
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)
int MHD_socket_nonblocking_(MHD_socket sock)
MHD_socket MHD_socket_create_listen_(int pf)
#define MHD_SCKT_FD_FITS_FDSET_SETSIZE_(fd, pset, setsize)
#define MHD_SCKT_ADD_FD_TO_FDSET_SETSIZE_(fd, pset, setsize)
#define MHD_socket_close_(fd)
#define MHD_socket_get_error_()
#define MHD_socket_fset_error_(err)
int MHD_socket_set_nodelay_(MHD_socket sock, bool on)
#define SOCK_NOSIGPIPE_OR_ZERO
#define MSG_NOSIGNAL_OR_ZERO
#define SOCK_CLOEXEC_OR_ZERO
#define MHD_INVALID_SOCKET