diff options
Diffstat (limited to 'src/microhttpd/mhd_sockets.c')
-rw-r--r-- | src/microhttpd/mhd_sockets.c | 545 |
1 files changed, 545 insertions, 0 deletions
diff --git a/src/microhttpd/mhd_sockets.c b/src/microhttpd/mhd_sockets.c new file mode 100644 index 00000000..4214108e --- /dev/null +++ b/src/microhttpd/mhd_sockets.c | |||
@@ -0,0 +1,545 @@ | |||
1 | /* | ||
2 | This file is part of libmicrohttpd | ||
3 | Copyright (C) 2014-2016 Karlson2k (Evgeny Grin) | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Lesser General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2.1 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Lesser General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU Lesser General Public | ||
16 | License along with this library; if not, write to the Free Software | ||
17 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||
18 | |||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file microhttpd/mhd_sockets.c | ||
23 | * @brief Implementation for sockets functions | ||
24 | * @author Karlson2k (Evgeny Grin) | ||
25 | */ | ||
26 | |||
27 | #include "mhd_sockets.h" | ||
28 | |||
29 | #ifdef MHD_WINSOCK_SOCKETS | ||
30 | |||
31 | /** | ||
32 | * Return errno equivalent of last winsock error | ||
33 | * @return errno equivalent of last winsock error | ||
34 | */ | ||
35 | int MHD_W32_errno_from_winsock_(void) | ||
36 | { | ||
37 | switch(WSAGetLastError()) | ||
38 | { | ||
39 | case 0: return 0; | ||
40 | case WSA_INVALID_HANDLE: return EBADF; | ||
41 | case WSA_NOT_ENOUGH_MEMORY: return ENOMEM; | ||
42 | case WSA_INVALID_PARAMETER: return EINVAL; | ||
43 | case WSAEINTR: return EINTR; | ||
44 | case WSAEWOULDBLOCK: return EWOULDBLOCK; | ||
45 | case WSAEINPROGRESS: return EINPROGRESS; | ||
46 | case WSAEALREADY: return EALREADY; | ||
47 | case WSAENOTSOCK: return ENOTSOCK; | ||
48 | case WSAEDESTADDRREQ: return EDESTADDRREQ; | ||
49 | case WSAEMSGSIZE: return EMSGSIZE; | ||
50 | case WSAEPROTOTYPE: return EPROTOTYPE; | ||
51 | case WSAENOPROTOOPT: return ENOPROTOOPT; | ||
52 | case WSAEPROTONOSUPPORT: return EPROTONOSUPPORT; | ||
53 | case WSAESOCKTNOSUPPORT: return ESOCKTNOSUPPORT; | ||
54 | case WSAEOPNOTSUPP: return EOPNOTSUPP; | ||
55 | case WSAEPFNOSUPPORT: return EPFNOSUPPORT; | ||
56 | case WSAEAFNOSUPPORT: return EAFNOSUPPORT; | ||
57 | case WSAEADDRINUSE: return EADDRINUSE; | ||
58 | case WSAEADDRNOTAVAIL: return EADDRNOTAVAIL; | ||
59 | case WSAENETDOWN: return ENETDOWN; | ||
60 | case WSAENETUNREACH: return ENETUNREACH; | ||
61 | case WSAENETRESET: return ENETRESET; | ||
62 | case WSAECONNABORTED: return ECONNABORTED; | ||
63 | case WSAECONNRESET: return ECONNRESET; | ||
64 | case WSAENOBUFS: return ENOBUFS; | ||
65 | case WSAEISCONN: return EISCONN; | ||
66 | case WSAENOTCONN: return ENOTCONN; | ||
67 | case WSAESHUTDOWN: return ESHUTDOWN; | ||
68 | case WSAETOOMANYREFS: return ETOOMANYREFS; | ||
69 | case WSAETIMEDOUT: return ETIMEDOUT; | ||
70 | case WSAECONNREFUSED: return ECONNREFUSED; | ||
71 | case WSAELOOP: return ELOOP; | ||
72 | case WSAENAMETOOLONG: return ENAMETOOLONG; | ||
73 | case WSAEHOSTDOWN: return EHOSTDOWN; | ||
74 | case WSAEHOSTUNREACH: return EHOSTUNREACH; | ||
75 | case WSAENOTEMPTY: return ENOTEMPTY; | ||
76 | case WSAEPROCLIM: return EPROCLIM; | ||
77 | case WSAEUSERS: return EUSERS; | ||
78 | case WSAEDQUOT: return EDQUOT; | ||
79 | case WSAESTALE: return ESTALE; | ||
80 | case WSAEREMOTE: return EREMOTE; | ||
81 | case WSAEINVAL: return EINVAL; | ||
82 | case WSAEFAULT: return EFAULT; | ||
83 | case WSANO_DATA: return ENODATA; | ||
84 | /* Rough equivalents */ | ||
85 | case WSAEDISCON: return ECONNRESET; | ||
86 | case WSAEINVALIDPROCTABLE: return EFAULT; | ||
87 | case WSASYSNOTREADY: | ||
88 | case WSANOTINITIALISED: | ||
89 | case WSASYSCALLFAILURE: return ENOBUFS; | ||
90 | case WSAVERNOTSUPPORTED: return EOPNOTSUPP; | ||
91 | case WSAEREFUSED: return EIO; | ||
92 | } | ||
93 | return EINVAL; | ||
94 | } | ||
95 | |||
96 | /** | ||
97 | * Return pointer to string description of errnum error | ||
98 | * Works fine with both standard errno errnums | ||
99 | * and errnums from MHD_W32_errno_from_winsock_ | ||
100 | * @param errnum the errno or value from MHD_W32_errno_from_winsock_() | ||
101 | * @return pointer to string description of error | ||
102 | */ | ||
103 | const char* MHD_W32_strerror_(int errnum) | ||
104 | { | ||
105 | switch(errnum) | ||
106 | { | ||
107 | case 0: | ||
108 | return "No error"; | ||
109 | case EWOULDBLOCK: | ||
110 | return "Operation would block"; | ||
111 | case EINPROGRESS: | ||
112 | return "Connection already in progress"; | ||
113 | case EALREADY: | ||
114 | return "Socket already connected"; | ||
115 | case ENOTSOCK: | ||
116 | return "Socket operation on non-socket"; | ||
117 | case EDESTADDRREQ: | ||
118 | return "Destination address required"; | ||
119 | case EMSGSIZE: | ||
120 | return "Message too long"; | ||
121 | case EPROTOTYPE: | ||
122 | return "Protocol wrong type for socket"; | ||
123 | case ENOPROTOOPT: | ||
124 | return "Protocol not available"; | ||
125 | case EPROTONOSUPPORT: | ||
126 | return "Unknown protocol"; | ||
127 | case ESOCKTNOSUPPORT: | ||
128 | return "Socket type not supported"; | ||
129 | case EOPNOTSUPP: | ||
130 | return "Operation not supported on socket"; | ||
131 | case EPFNOSUPPORT: | ||
132 | return "Protocol family not supported"; | ||
133 | case EAFNOSUPPORT: | ||
134 | return "Address family not supported by protocol family"; | ||
135 | case EADDRINUSE: | ||
136 | return "Address already in use"; | ||
137 | case EADDRNOTAVAIL: | ||
138 | return "Cannot assign requested address"; | ||
139 | case ENETDOWN: | ||
140 | return "Network is down"; | ||
141 | case ENETUNREACH: | ||
142 | return "Network is unreachable"; | ||
143 | case ENETRESET: | ||
144 | return "Network dropped connection on reset"; | ||
145 | case ECONNABORTED: | ||
146 | return "Software caused connection abort"; | ||
147 | case ECONNRESET: | ||
148 | return "Connection reset by peer"; | ||
149 | case ENOBUFS: | ||
150 | return "No system resources available"; | ||
151 | case EISCONN: | ||
152 | return "Socket is already connected"; | ||
153 | case ENOTCONN: | ||
154 | return "Socket is not connected"; | ||
155 | case ESHUTDOWN: | ||
156 | return "Can't send after socket shutdown"; | ||
157 | case ETOOMANYREFS: | ||
158 | return "Too many references: cannot splice"; | ||
159 | case ETIMEDOUT: | ||
160 | return "Connection timed out"; | ||
161 | case ECONNREFUSED: | ||
162 | return "Connection refused"; | ||
163 | case ELOOP: | ||
164 | return "Cannot translate name"; | ||
165 | case EHOSTDOWN: | ||
166 | return "Host is down"; | ||
167 | case EHOSTUNREACH: | ||
168 | return "Host is unreachable"; | ||
169 | case EPROCLIM: | ||
170 | return "Too many processes"; | ||
171 | case EUSERS: | ||
172 | return "Too many users"; | ||
173 | case EDQUOT: | ||
174 | return "Disk quota exceeded"; | ||
175 | case ESTALE: | ||
176 | return "Stale file handle reference"; | ||
177 | case EREMOTE: | ||
178 | return "Resource is remote"; | ||
179 | case ENODATA: | ||
180 | return "No data available"; | ||
181 | } | ||
182 | return strerror(errnum); | ||
183 | } | ||
184 | |||
185 | /** | ||
186 | * Return pointer to string description of last winsock error | ||
187 | * @return pointer to string description of last winsock error | ||
188 | */ | ||
189 | const char* MHD_W32_strerror_last_winsock_(void) | ||
190 | { | ||
191 | switch (WSAGetLastError()) | ||
192 | { | ||
193 | case 0: | ||
194 | return "No error"; | ||
195 | case WSA_INVALID_HANDLE: | ||
196 | return "Specified event object handle is invalid"; | ||
197 | case WSA_NOT_ENOUGH_MEMORY: | ||
198 | return "Insufficient memory available"; | ||
199 | case WSA_INVALID_PARAMETER: | ||
200 | return "One or more parameters are invalid"; | ||
201 | case WSA_OPERATION_ABORTED: | ||
202 | return "Overlapped operation aborted"; | ||
203 | case WSA_IO_INCOMPLETE: | ||
204 | return "Overlapped I/O event object not in signaled state"; | ||
205 | case WSA_IO_PENDING: | ||
206 | return "Overlapped operations will complete later"; | ||
207 | case WSAEINTR: | ||
208 | return "Interrupted function call"; | ||
209 | case WSAEBADF: | ||
210 | return "File handle is not valid"; | ||
211 | case WSAEACCES: | ||
212 | return "Permission denied"; | ||
213 | case WSAEFAULT: | ||
214 | return "Bad address"; | ||
215 | case WSAEINVAL: | ||
216 | return "Invalid argument"; | ||
217 | case WSAEMFILE: | ||
218 | return "Too many open files"; | ||
219 | case WSAEWOULDBLOCK: | ||
220 | return "Resource temporarily unavailable"; | ||
221 | case WSAEINPROGRESS: | ||
222 | return "Operation now in progress"; | ||
223 | case WSAEALREADY: | ||
224 | return "Operation already in progress"; | ||
225 | case WSAENOTSOCK: | ||
226 | return "Socket operation on nonsocket"; | ||
227 | case WSAEDESTADDRREQ: | ||
228 | return "Destination address required"; | ||
229 | case WSAEMSGSIZE: | ||
230 | return "Message too long"; | ||
231 | case WSAEPROTOTYPE: | ||
232 | return "Protocol wrong type for socket"; | ||
233 | case WSAENOPROTOOPT: | ||
234 | return "Bad protocol option"; | ||
235 | case WSAEPROTONOSUPPORT: | ||
236 | return "Protocol not supported"; | ||
237 | case WSAESOCKTNOSUPPORT: | ||
238 | return "Socket type not supported"; | ||
239 | case WSAEOPNOTSUPP: | ||
240 | return "Operation not supported"; | ||
241 | case WSAEPFNOSUPPORT: | ||
242 | return "Protocol family not supported"; | ||
243 | case WSAEAFNOSUPPORT: | ||
244 | return "Address family not supported by protocol family"; | ||
245 | case WSAEADDRINUSE: | ||
246 | return "Address already in use"; | ||
247 | case WSAEADDRNOTAVAIL: | ||
248 | return "Cannot assign requested address"; | ||
249 | case WSAENETDOWN: | ||
250 | return "Network is down"; | ||
251 | case WSAENETUNREACH: | ||
252 | return "Network is unreachable"; | ||
253 | case WSAENETRESET: | ||
254 | return "Network dropped connection on reset"; | ||
255 | case WSAECONNABORTED: | ||
256 | return "Software caused connection abort"; | ||
257 | case WSAECONNRESET: | ||
258 | return "Connection reset by peer"; | ||
259 | case WSAENOBUFS: | ||
260 | return "No buffer space available"; | ||
261 | case WSAEISCONN: | ||
262 | return "Socket is already connected"; | ||
263 | case WSAENOTCONN: | ||
264 | return "Socket is not connected"; | ||
265 | case WSAESHUTDOWN: | ||
266 | return "Cannot send after socket shutdown"; | ||
267 | case WSAETOOMANYREFS: | ||
268 | return "Too many references"; | ||
269 | case WSAETIMEDOUT: | ||
270 | return "Connection timed out"; | ||
271 | case WSAECONNREFUSED: | ||
272 | return "Connection refused"; | ||
273 | case WSAELOOP: | ||
274 | return "Cannot translate name"; | ||
275 | case WSAENAMETOOLONG: | ||
276 | return "Name too long"; | ||
277 | case WSAEHOSTDOWN: | ||
278 | return "Host is down"; | ||
279 | case WSAEHOSTUNREACH: | ||
280 | return "No route to host"; | ||
281 | case WSAENOTEMPTY: | ||
282 | return "Directory not empty"; | ||
283 | case WSAEPROCLIM: | ||
284 | return "Too many processes"; | ||
285 | case WSAEUSERS: | ||
286 | return "User quota exceeded"; | ||
287 | case WSAEDQUOT: | ||
288 | return "Disk quota exceeded"; | ||
289 | case WSAESTALE: | ||
290 | return "Stale file handle reference"; | ||
291 | case WSAEREMOTE: | ||
292 | return "Item is remote"; | ||
293 | case WSASYSNOTREADY: | ||
294 | return "Network subsystem is unavailable"; | ||
295 | case WSAVERNOTSUPPORTED: | ||
296 | return "Winsock.dll version out of range"; | ||
297 | case WSANOTINITIALISED: | ||
298 | return "Successful WSAStartup not yet performed"; | ||
299 | case WSAEDISCON: | ||
300 | return "Graceful shutdown in progress"; | ||
301 | case WSAENOMORE: | ||
302 | return "No more results"; | ||
303 | case WSAECANCELLED: | ||
304 | return "Call has been canceled"; | ||
305 | case WSAEINVALIDPROCTABLE: | ||
306 | return "Procedure call table is invalid"; | ||
307 | case WSAEINVALIDPROVIDER: | ||
308 | return "Service provider is invalid"; | ||
309 | case WSAEPROVIDERFAILEDINIT: | ||
310 | return "Service provider failed to initialize"; | ||
311 | case WSASYSCALLFAILURE: | ||
312 | return "System call failure"; | ||
313 | case WSASERVICE_NOT_FOUND: | ||
314 | return "Service not found"; | ||
315 | case WSATYPE_NOT_FOUND: | ||
316 | return "Class type not found"; | ||
317 | case WSA_E_NO_MORE: | ||
318 | return "No more results"; | ||
319 | case WSA_E_CANCELLED: | ||
320 | return "Call was canceled"; | ||
321 | case WSAEREFUSED: | ||
322 | return "Database query was refused"; | ||
323 | case WSAHOST_NOT_FOUND: | ||
324 | return "Host not found"; | ||
325 | case WSATRY_AGAIN: | ||
326 | return "Nonauthoritative host not found"; | ||
327 | case WSANO_RECOVERY: | ||
328 | return "This is a nonrecoverable error"; | ||
329 | case WSANO_DATA: | ||
330 | return "Valid name, no data record of requested type"; | ||
331 | case WSA_QOS_RECEIVERS: | ||
332 | return "QoS receivers"; | ||
333 | case WSA_QOS_SENDERS: | ||
334 | return "QoS senders"; | ||
335 | case WSA_QOS_NO_SENDERS: | ||
336 | return "No QoS senders"; | ||
337 | case WSA_QOS_NO_RECEIVERS: | ||
338 | return "QoS no receivers"; | ||
339 | case WSA_QOS_REQUEST_CONFIRMED: | ||
340 | return "QoS request confirmed"; | ||
341 | case WSA_QOS_ADMISSION_FAILURE: | ||
342 | return "QoS admission error"; | ||
343 | case WSA_QOS_POLICY_FAILURE: | ||
344 | return "QoS policy failure"; | ||
345 | case WSA_QOS_BAD_STYLE: | ||
346 | return "QoS bad style"; | ||
347 | case WSA_QOS_BAD_OBJECT: | ||
348 | return "QoS bad object"; | ||
349 | case WSA_QOS_TRAFFIC_CTRL_ERROR: | ||
350 | return "QoS traffic control error"; | ||
351 | case WSA_QOS_GENERIC_ERROR: | ||
352 | return "QoS generic error"; | ||
353 | case WSA_QOS_ESERVICETYPE: | ||
354 | return "QoS service type error"; | ||
355 | case WSA_QOS_EFLOWSPEC: | ||
356 | return "QoS flowspec error"; | ||
357 | case WSA_QOS_EPROVSPECBUF: | ||
358 | return "Invalid QoS provider buffer"; | ||
359 | case WSA_QOS_EFILTERSTYLE: | ||
360 | return "Invalid QoS filter style"; | ||
361 | case WSA_QOS_EFILTERTYPE: | ||
362 | return "Invalid QoS filter type"; | ||
363 | case WSA_QOS_EFILTERCOUNT: | ||
364 | return "Incorrect QoS filter count"; | ||
365 | case WSA_QOS_EOBJLENGTH: | ||
366 | return "Invalid QoS object length"; | ||
367 | case WSA_QOS_EFLOWCOUNT: | ||
368 | return "Incorrect QoS flow count"; | ||
369 | case WSA_QOS_EUNKOWNPSOBJ: | ||
370 | return "Unrecognized QoS object"; | ||
371 | case WSA_QOS_EPOLICYOBJ: | ||
372 | return "Invalid QoS policy object"; | ||
373 | case WSA_QOS_EFLOWDESC: | ||
374 | return "Invalid QoS flow descriptor"; | ||
375 | case WSA_QOS_EPSFLOWSPEC: | ||
376 | return "Invalid QoS provider-specific flowspec"; | ||
377 | case WSA_QOS_EPSFILTERSPEC: | ||
378 | return "Invalid QoS provider-specific filterspec"; | ||
379 | case WSA_QOS_ESDMODEOBJ: | ||
380 | return "Invalid QoS shape discard mode object"; | ||
381 | case WSA_QOS_ESHAPERATEOBJ: | ||
382 | return "Invalid QoS shaping rate object"; | ||
383 | case WSA_QOS_RESERVED_PETYPE: | ||
384 | return "Reserved policy QoS element type"; | ||
385 | } | ||
386 | return "Unknown winsock error"; | ||
387 | } | ||
388 | |||
389 | /** | ||
390 | * Set last winsock error to equivalent of given errno value | ||
391 | * @param errnum the errno value to set | ||
392 | */ | ||
393 | void MHD_W32_set_last_winsock_error_(int errnum) | ||
394 | { | ||
395 | switch (errnum) | ||
396 | { | ||
397 | case 0: | ||
398 | WSASetLastError(0); | ||
399 | break; | ||
400 | case EBADF: | ||
401 | WSASetLastError(WSA_INVALID_HANDLE); | ||
402 | break; | ||
403 | case ENOMEM: | ||
404 | WSASetLastError(WSA_NOT_ENOUGH_MEMORY); | ||
405 | break; | ||
406 | case EINVAL: | ||
407 | WSASetLastError(WSA_INVALID_PARAMETER); | ||
408 | break; | ||
409 | case EINTR: | ||
410 | WSASetLastError(WSAEINTR); | ||
411 | break; | ||
412 | case EWOULDBLOCK: | ||
413 | WSASetLastError(WSAEWOULDBLOCK); | ||
414 | break; | ||
415 | case EINPROGRESS: | ||
416 | WSASetLastError(WSAEINPROGRESS); | ||
417 | break; | ||
418 | case EALREADY: | ||
419 | WSASetLastError(WSAEALREADY); | ||
420 | break; | ||
421 | case ENOTSOCK: | ||
422 | WSASetLastError(WSAENOTSOCK); | ||
423 | break; | ||
424 | case EDESTADDRREQ: | ||
425 | WSASetLastError(WSAEDESTADDRREQ); | ||
426 | break; | ||
427 | case EMSGSIZE: | ||
428 | WSASetLastError(WSAEMSGSIZE); | ||
429 | break; | ||
430 | case EPROTOTYPE: | ||
431 | WSASetLastError(WSAEPROTOTYPE); | ||
432 | break; | ||
433 | case ENOPROTOOPT: | ||
434 | WSASetLastError(WSAENOPROTOOPT); | ||
435 | break; | ||
436 | case EPROTONOSUPPORT: | ||
437 | WSASetLastError(WSAEPROTONOSUPPORT); | ||
438 | break; | ||
439 | case ESOCKTNOSUPPORT: | ||
440 | WSASetLastError(WSAESOCKTNOSUPPORT); | ||
441 | break; | ||
442 | case EOPNOTSUPP: | ||
443 | WSASetLastError(WSAEOPNOTSUPP); | ||
444 | break; | ||
445 | case EPFNOSUPPORT: | ||
446 | WSASetLastError(WSAEPFNOSUPPORT); | ||
447 | break; | ||
448 | case EAFNOSUPPORT: | ||
449 | WSASetLastError(WSAEAFNOSUPPORT); | ||
450 | break; | ||
451 | case EADDRINUSE: | ||
452 | WSASetLastError(WSAEADDRINUSE); | ||
453 | break; | ||
454 | case EADDRNOTAVAIL: | ||
455 | WSASetLastError(WSAEADDRNOTAVAIL); | ||
456 | break; | ||
457 | case ENETDOWN: | ||
458 | WSASetLastError(WSAENETDOWN); | ||
459 | break; | ||
460 | case ENETUNREACH: | ||
461 | WSASetLastError(WSAENETUNREACH); | ||
462 | break; | ||
463 | case ENETRESET: | ||
464 | WSASetLastError(WSAENETRESET); | ||
465 | break; | ||
466 | case ECONNABORTED: | ||
467 | WSASetLastError(WSAECONNABORTED); | ||
468 | break; | ||
469 | case ECONNRESET: | ||
470 | WSASetLastError(WSAECONNRESET); | ||
471 | break; | ||
472 | case ENOBUFS: | ||
473 | WSASetLastError(WSAENOBUFS); | ||
474 | break; | ||
475 | case EISCONN: | ||
476 | WSASetLastError(WSAEISCONN); | ||
477 | break; | ||
478 | case ENOTCONN: | ||
479 | WSASetLastError(WSAENOTCONN); | ||
480 | break; | ||
481 | case ESHUTDOWN: | ||
482 | WSASetLastError(WSAESHUTDOWN); | ||
483 | break; | ||
484 | case ETOOMANYREFS: | ||
485 | WSASetLastError(WSAETOOMANYREFS); | ||
486 | break; | ||
487 | case ETIMEDOUT: | ||
488 | WSASetLastError(WSAETIMEDOUT); | ||
489 | break; | ||
490 | case ECONNREFUSED: | ||
491 | WSASetLastError(WSAECONNREFUSED); | ||
492 | break; | ||
493 | case ELOOP: | ||
494 | WSASetLastError(WSAELOOP); | ||
495 | break; | ||
496 | case ENAMETOOLONG: | ||
497 | WSASetLastError(WSAENAMETOOLONG); | ||
498 | break; | ||
499 | case EHOSTDOWN: | ||
500 | WSASetLastError(WSAEHOSTDOWN); | ||
501 | break; | ||
502 | case EHOSTUNREACH: | ||
503 | WSASetLastError(WSAEHOSTUNREACH); | ||
504 | break; | ||
505 | case ENOTEMPTY: | ||
506 | WSASetLastError(WSAENOTEMPTY); | ||
507 | break; | ||
508 | case EPROCLIM: | ||
509 | WSASetLastError(WSAEPROCLIM); | ||
510 | break; | ||
511 | case EUSERS: | ||
512 | WSASetLastError(WSAEUSERS); | ||
513 | break; | ||
514 | case EDQUOT: | ||
515 | WSASetLastError(WSAEDQUOT); | ||
516 | break; | ||
517 | case ESTALE: | ||
518 | WSASetLastError(WSAESTALE); | ||
519 | break; | ||
520 | case EREMOTE: | ||
521 | WSASetLastError(WSAEREMOTE); | ||
522 | break; | ||
523 | case EFAULT: | ||
524 | WSASetLastError(WSAEFAULT); | ||
525 | break; | ||
526 | case ENODATA: | ||
527 | WSASetLastError(WSANO_DATA); | ||
528 | break; | ||
529 | #if EAGAIN != EWOULDBLOCK | ||
530 | case EAGAIN: | ||
531 | WSASetLastError(WSAEWOULDBLOCK); | ||
532 | break; | ||
533 | #endif | ||
534 | /* Rough equivalent */ | ||
535 | case EIO: | ||
536 | WSASetLastError(WSAEREFUSED); | ||
537 | break; | ||
538 | |||
539 | default: /* Unmapped errors */ | ||
540 | WSASetLastError(WSAENOBUFS); | ||
541 | break; | ||
542 | } | ||
543 | } | ||
544 | |||
545 | #endif /* MHD_WINSOCK_SOCKETS */ | ||