diff options
author | Diego Nehab <diego@impa.br> | 2015-03-03 19:17:53 -0300 |
---|---|---|
committer | Diego Nehab <diego@impa.br> | 2015-03-03 19:17:53 -0300 |
commit | 892ea1791a2f2ec24c087f7bf4c9b2b8126327e0 (patch) | |
tree | 6d2e26afdc5453df64bef3600ab780acd808bcaf | |
parent | 8066a90e87efd50db43cba7d76b3c700bea8aa84 (diff) | |
parent | d3ed08616bdc4be62ab64332e0118090f1c6fce1 (diff) | |
download | luasocket-892ea1791a2f2ec24c087f7bf4c9b2b8126327e0.tar.gz luasocket-892ea1791a2f2ec24c087f7bf4c9b2b8126327e0.tar.bz2 luasocket-892ea1791a2f2ec24c087f7bf4c9b2b8126327e0.zip |
Merge branch 'errormsg' of https://github.com/Tieske/luasocket into Tieske-errormsg
-rw-r--r-- | src/pierror.h | 28 | ||||
-rw-r--r-- | src/usocket.c | 40 | ||||
-rw-r--r-- | src/wsocket.c | 61 |
3 files changed, 78 insertions, 51 deletions
diff --git a/src/pierror.h b/src/pierror.h new file mode 100644 index 0000000..cb773ab --- /dev/null +++ b/src/pierror.h | |||
@@ -0,0 +1,28 @@ | |||
1 | #ifndef PIERROR_H | ||
2 | #define PIERROR_H | ||
3 | /*=========================================================================*\ | ||
4 | * Error messages | ||
5 | * Defines platform independent error messages | ||
6 | \*=========================================================================*/ | ||
7 | |||
8 | #define PIE_HOST_NOT_FOUND "host not found" | ||
9 | #define PIE_ADDRINUSE "address already in use" | ||
10 | #define PIE_ISCONN "already connected" | ||
11 | #define PIE_ACCESS "permission denied" | ||
12 | #define PIE_CONNREFUSED "connection refused" | ||
13 | #define PIE_CONNABORTED "closed" | ||
14 | #define PIE_CONNRESET "closed" | ||
15 | #define PIE_TIMEDOUT "timeout" | ||
16 | #define PIE_AGAIN "temporary failure in name resolution" | ||
17 | #define PIE_BADFLAGS "invalid value for ai_flags" | ||
18 | #define PIE_BADHINTS "invalid value for hints" | ||
19 | #define PIE_FAIL "non-recoverable failure in name resolution" | ||
20 | #define PIE_FAMILY "ai_family not supported" | ||
21 | #define PIE_MEMORY "memory allocation failure" | ||
22 | #define PIE_NONAME "host or service not provided, or not known" | ||
23 | #define PIE_OVERFLOW "argument buffer overflow" | ||
24 | #define PIE_PROTOCOL "resolved protocol is unknown" | ||
25 | #define PIE_SERVICE "service not supported for socket type" | ||
26 | #define PIE_SOCKTYPE "ai_socktype not supported" | ||
27 | |||
28 | #endif | ||
diff --git a/src/usocket.c b/src/usocket.c index 89f774d..0a0f5f9 100644 --- a/src/usocket.c +++ b/src/usocket.c | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <signal.h> | 10 | #include <signal.h> |
11 | 11 | ||
12 | #include "socket.h" | 12 | #include "socket.h" |
13 | #include "pierror.h" | ||
13 | 14 | ||
14 | /*-------------------------------------------------------------------------*\ | 15 | /*-------------------------------------------------------------------------*\ |
15 | * Wait for readable/writable/connected socket with timeout | 16 | * Wait for readable/writable/connected socket with timeout |
@@ -394,7 +395,7 @@ int socket_gethostbyname(const char *addr, struct hostent **hp) { | |||
394 | const char *socket_hoststrerror(int err) { | 395 | const char *socket_hoststrerror(int err) { |
395 | if (err <= 0) return io_strerror(err); | 396 | if (err <= 0) return io_strerror(err); |
396 | switch (err) { | 397 | switch (err) { |
397 | case HOST_NOT_FOUND: return "host not found"; | 398 | case HOST_NOT_FOUND: return PIE_HOSTNOTFOUND; |
398 | default: return hstrerror(err); | 399 | default: return hstrerror(err); |
399 | } | 400 | } |
400 | } | 401 | } |
@@ -402,13 +403,13 @@ const char *socket_hoststrerror(int err) { | |||
402 | const char *socket_strerror(int err) { | 403 | const char *socket_strerror(int err) { |
403 | if (err <= 0) return io_strerror(err); | 404 | if (err <= 0) return io_strerror(err); |
404 | switch (err) { | 405 | switch (err) { |
405 | case EADDRINUSE: return "address already in use"; | 406 | case EADDRINUSE: return PIE_ADDRINUSE; |
406 | case EISCONN: return "already connected"; | 407 | case EISCONN: return PIE_ISCONN; |
407 | case EACCES: return "permission denied"; | 408 | case EACCES: return PIE_ACCESS; |
408 | case ECONNREFUSED: return "connection refused"; | 409 | case ECONNREFUSED: return PIE_CONNREFUSED; |
409 | case ECONNABORTED: return "closed"; | 410 | case ECONNABORTED: return PIE_CONNABORTED; |
410 | case ECONNRESET: return "closed"; | 411 | case ECONNRESET: return PIE_CONNRESET; |
411 | case ETIMEDOUT: return "timeout"; | 412 | case ETIMEDOUT: return PIE_TIMEDOUT; |
412 | default: return strerror(err); | 413 | default: return strerror(err); |
413 | } | 414 | } |
414 | } | 415 | } |
@@ -421,22 +422,21 @@ const char *socket_ioerror(p_socket ps, int err) { | |||
421 | const char *socket_gaistrerror(int err) { | 422 | const char *socket_gaistrerror(int err) { |
422 | if (err == 0) return NULL; | 423 | if (err == 0) return NULL; |
423 | switch (err) { | 424 | switch (err) { |
424 | case EAI_AGAIN: return "temporary failure in name resolution"; | 425 | case EAI_AGAIN: return PIE_AGAIN; |
425 | case EAI_BADFLAGS: return "invalid value for ai_flags"; | 426 | case EAI_BADFLAGS: return PIE_BADFLAGS; |
426 | #ifdef EAI_BADHINTS | 427 | #ifdef EAI_BADHINTS |
427 | case EAI_BADHINTS: return "invalid value for hints"; | 428 | case EAI_BADHINTS: return PIE_BADHINTS; |
428 | #endif | 429 | #endif |
429 | case EAI_FAIL: return "non-recoverable failure in name resolution"; | 430 | case EAI_FAIL: return PIE_FAIL; |
430 | case EAI_FAMILY: return "ai_family not supported"; | 431 | case EAI_FAMILY: return PIE_FAMILY; |
431 | case EAI_MEMORY: return "memory allocation failure"; | 432 | case EAI_MEMORY: return PIE_MEMORY; |
432 | case EAI_NONAME: | 433 | case EAI_NONAME: return PIE_NONAME; |
433 | return "host or service not provided, or not known"; | 434 | case EAI_OVERFLOW: return PIE_OVERFLOW; |
434 | case EAI_OVERFLOW: return "argument buffer overflow"; | ||
435 | #ifdef EAI_PROTOCOL | 435 | #ifdef EAI_PROTOCOL |
436 | case EAI_PROTOCOL: return "resolved protocol is unknown"; | 436 | case EAI_PROTOCOL: return PIE_PROTOCOL; |
437 | #endif | 437 | #endif |
438 | case EAI_SERVICE: return "service not supported for socket type"; | 438 | case EAI_SERVICE: return PIE_SERVICE; |
439 | case EAI_SOCKTYPE: return "ai_socktype not supported"; | 439 | case EAI_SOCKTYPE: return PIE_SOCKTYPE; |
440 | case EAI_SYSTEM: return strerror(errno); | 440 | case EAI_SYSTEM: return strerror(errno); |
441 | default: return gai_strerror(err); | 441 | default: return gai_strerror(err); |
442 | } | 442 | } |
diff --git a/src/wsocket.c b/src/wsocket.c index b4a4384..10800e3 100644 --- a/src/wsocket.c +++ b/src/wsocket.c | |||
@@ -8,6 +8,7 @@ | |||
8 | #include <string.h> | 8 | #include <string.h> |
9 | 9 | ||
10 | #include "socket.h" | 10 | #include "socket.h" |
11 | #include "pierror.h" | ||
11 | 12 | ||
12 | /* WinSock doesn't have a strerror... */ | 13 | /* WinSock doesn't have a strerror... */ |
13 | static const char *wstrerror(int err); | 14 | static const char *wstrerror(int err); |
@@ -330,7 +331,7 @@ int socket_gethostbyname(const char *addr, struct hostent **hp) { | |||
330 | const char *socket_hoststrerror(int err) { | 331 | const char *socket_hoststrerror(int err) { |
331 | if (err <= 0) return io_strerror(err); | 332 | if (err <= 0) return io_strerror(err); |
332 | switch (err) { | 333 | switch (err) { |
333 | case WSAHOST_NOT_FOUND: return "host not found"; | 334 | case WSAHOST_NOT_FOUND: return PIE_HOST_NOT_FOUND; |
334 | default: return wstrerror(err); | 335 | default: return wstrerror(err); |
335 | } | 336 | } |
336 | } | 337 | } |
@@ -338,13 +339,13 @@ const char *socket_hoststrerror(int err) { | |||
338 | const char *socket_strerror(int err) { | 339 | const char *socket_strerror(int err) { |
339 | if (err <= 0) return io_strerror(err); | 340 | if (err <= 0) return io_strerror(err); |
340 | switch (err) { | 341 | switch (err) { |
341 | case WSAEADDRINUSE: return "address already in use"; | 342 | case WSAEADDRINUSE: return PIE_ADDRINUSE; |
342 | case WSAECONNREFUSED: return "connection refused"; | 343 | case WSAECONNREFUSED : return PIE_CONNREFUSED; |
343 | case WSAEISCONN: return "already connected"; | 344 | case WSAEISCONN: return PIE_ISCONN; |
344 | case WSAEACCES: return "permission denied"; | 345 | case WSAEACCES: return PIE_ACCESS; |
345 | case WSAECONNABORTED: return "closed"; | 346 | case WSAECONNABORTED: return PIE_CONNABORTED; |
346 | case WSAECONNRESET: return "closed"; | 347 | case WSAECONNRESET: return PIE_CONNRESET; |
347 | case WSAETIMEDOUT: return "timeout"; | 348 | case WSAETIMEDOUT: return PIE_TIMEDOUT; |
348 | default: return wstrerror(err); | 349 | default: return wstrerror(err); |
349 | } | 350 | } |
350 | } | 351 | } |
@@ -357,7 +358,7 @@ const char *socket_ioerror(p_socket ps, int err) { | |||
357 | static const char *wstrerror(int err) { | 358 | static const char *wstrerror(int err) { |
358 | switch (err) { | 359 | switch (err) { |
359 | case WSAEINTR: return "Interrupted function call"; | 360 | case WSAEINTR: return "Interrupted function call"; |
360 | case WSAEACCES: return "Permission denied"; | 361 | case WSAEACCES: return PIE_ACCESS; // "Permission denied"; |
361 | case WSAEFAULT: return "Bad address"; | 362 | case WSAEFAULT: return "Bad address"; |
362 | case WSAEINVAL: return "Invalid argument"; | 363 | case WSAEINVAL: return "Invalid argument"; |
363 | case WSAEMFILE: return "Too many open files"; | 364 | case WSAEMFILE: return "Too many open files"; |
@@ -370,24 +371,23 @@ static const char *wstrerror(int err) { | |||
370 | case WSAEPROTOTYPE: return "Protocol wrong type for socket"; | 371 | case WSAEPROTOTYPE: return "Protocol wrong type for socket"; |
371 | case WSAENOPROTOOPT: return "Bad protocol option"; | 372 | case WSAENOPROTOOPT: return "Bad protocol option"; |
372 | case WSAEPROTONOSUPPORT: return "Protocol not supported"; | 373 | case WSAEPROTONOSUPPORT: return "Protocol not supported"; |
373 | case WSAESOCKTNOSUPPORT: return "Socket type not supported"; | 374 | case WSAESOCKTNOSUPPORT: return PIE_SOCKTYPE; // "Socket type not supported"; |
374 | case WSAEOPNOTSUPP: return "Operation not supported"; | 375 | case WSAEOPNOTSUPP: return "Operation not supported"; |
375 | case WSAEPFNOSUPPORT: return "Protocol family not supported"; | 376 | case WSAEPFNOSUPPORT: return "Protocol family not supported"; |
376 | case WSAEAFNOSUPPORT: | 377 | case WSAEAFNOSUPPORT: return PIE_FAMILY; // "Address family not supported by protocol family"; |
377 | return "Address family not supported by protocol family"; | 378 | case WSAEADDRINUSE: return PIE_ADDRINUSE; // "Address already in use"; |
378 | case WSAEADDRINUSE: return "Address already in use"; | ||
379 | case WSAEADDRNOTAVAIL: return "Cannot assign requested address"; | 379 | case WSAEADDRNOTAVAIL: return "Cannot assign requested address"; |
380 | case WSAENETDOWN: return "Network is down"; | 380 | case WSAENETDOWN: return "Network is down"; |
381 | case WSAENETUNREACH: return "Network is unreachable"; | 381 | case WSAENETUNREACH: return "Network is unreachable"; |
382 | case WSAENETRESET: return "Network dropped connection on reset"; | 382 | case WSAENETRESET: return "Network dropped connection on reset"; |
383 | case WSAECONNABORTED: return "Software caused connection abort"; | 383 | case WSAECONNABORTED: return "Software caused connection abort"; |
384 | case WSAECONNRESET: return "Connection reset by peer"; | 384 | case WSAECONNRESET: return PIE_CONNRESET; // "Connection reset by peer"; |
385 | case WSAENOBUFS: return "No buffer space available"; | 385 | case WSAENOBUFS: return "No buffer space available"; |
386 | case WSAEISCONN: return "Socket is already connected"; | 386 | case WSAEISCONN: return PIE_ISCONN; // "Socket is already connected"; |
387 | case WSAENOTCONN: return "Socket is not connected"; | 387 | case WSAENOTCONN: return "Socket is not connected"; |
388 | case WSAESHUTDOWN: return "Cannot send after socket shutdown"; | 388 | case WSAESHUTDOWN: return "Cannot send after socket shutdown"; |
389 | case WSAETIMEDOUT: return "Connection timed out"; | 389 | case WSAETIMEDOUT: return PIE_TIMEDOUT; // "Connection timed out"; |
390 | case WSAECONNREFUSED: return "Connection refused"; | 390 | case WSAECONNREFUSED: return PIE_CONNREFUSED; // "Connection refused"; |
391 | case WSAEHOSTDOWN: return "Host is down"; | 391 | case WSAEHOSTDOWN: return "Host is down"; |
392 | case WSAEHOSTUNREACH: return "No route to host"; | 392 | case WSAEHOSTUNREACH: return "No route to host"; |
393 | case WSAEPROCLIM: return "Too many processes"; | 393 | case WSAEPROCLIM: return "Too many processes"; |
@@ -396,9 +396,9 @@ static const char *wstrerror(int err) { | |||
396 | case WSANOTINITIALISED: | 396 | case WSANOTINITIALISED: |
397 | return "Successful WSAStartup not yet performed"; | 397 | return "Successful WSAStartup not yet performed"; |
398 | case WSAEDISCON: return "Graceful shutdown in progress"; | 398 | case WSAEDISCON: return "Graceful shutdown in progress"; |
399 | case WSAHOST_NOT_FOUND: return "Host not found"; | 399 | case WSAHOST_NOT_FOUND: return PIE_HOST_NOT_FOUND; // "Host not found"; |
400 | case WSATRY_AGAIN: return "Nonauthoritative host not found"; | 400 | case WSATRY_AGAIN: return "Nonauthoritative host not found"; |
401 | case WSANO_RECOVERY: return "Nonrecoverable name lookup error"; | 401 | case WSANO_RECOVERY: return PIE_FAIL; // "Nonrecoverable name lookup error"; |
402 | case WSANO_DATA: return "Valid name, no data record of requested type"; | 402 | case WSANO_DATA: return "Valid name, no data record of requested type"; |
403 | default: return "Unknown error"; | 403 | default: return "Unknown error"; |
404 | } | 404 | } |
@@ -407,24 +407,23 @@ static const char *wstrerror(int err) { | |||
407 | const char *socket_gaistrerror(int err) { | 407 | const char *socket_gaistrerror(int err) { |
408 | if (err == 0) return NULL; | 408 | if (err == 0) return NULL; |
409 | switch (err) { | 409 | switch (err) { |
410 | case EAI_AGAIN: return "temporary failure in name resolution"; | 410 | case EAI_AGAIN: return PIE_AGAIN; |
411 | case EAI_BADFLAGS: return "invalid value for ai_flags"; | 411 | case EAI_BADFLAGS: return PIE_BADFLAGS; |
412 | #ifdef EAI_BADHINTS | 412 | #ifdef EAI_BADHINTS |
413 | case EAI_BADHINTS: return "invalid value for hints"; | 413 | case EAI_BADHINTS: return PIE_BADHINTS; |
414 | #endif | 414 | #endif |
415 | case EAI_FAIL: return "non-recoverable failure in name resolution"; | 415 | case EAI_FAIL: return PIE_FAIL; |
416 | case EAI_FAMILY: return "ai_family not supported"; | 416 | case EAI_FAMILY: return PIE_FAMILY; |
417 | case EAI_MEMORY: return "memory allocation failure"; | 417 | case EAI_MEMORY: return PIE_MEMORY; |
418 | case EAI_NONAME: | 418 | case EAI_NONAME: return PIE_NONAME; |
419 | return "host or service not provided, or not known"; | ||
420 | #ifdef EAI_OVERFLOW | 419 | #ifdef EAI_OVERFLOW |
421 | case EAI_OVERFLOW: return "argument buffer overflow"; | 420 | case EAI_OVERFLOW: return PIE_OVERFLOW; |
422 | #endif | 421 | #endif |
423 | #ifdef EAI_PROTOCOL | 422 | #ifdef EAI_PROTOCOL |
424 | case EAI_PROTOCOL: return "resolved protocol is unknown"; | 423 | case EAI_PROTOCOL: return PIE_PROTOCOL; |
425 | #endif | 424 | #endif |
426 | case EAI_SERVICE: return "service not supported for socket type"; | 425 | case EAI_SERVICE: return PIE_SERVICE; |
427 | case EAI_SOCKTYPE: return "ai_socktype not supported"; | 426 | case EAI_SOCKTYPE: return PIE_SOCKTYPE; |
428 | #ifdef EAI_SYSTEM | 427 | #ifdef EAI_SYSTEM |
429 | case EAI_SYSTEM: return strerror(errno); | 428 | case EAI_SYSTEM: return strerror(errno); |
430 | #endif | 429 | #endif |