diff --git a/include/uv.h b/include/uv.h index 7bee2991..4be17ff7 100644 --- a/include/uv.h +++ b/include/uv.h @@ -52,6 +52,7 @@ typedef enum { UV_UNKNOWN = -1, UV_OK = 0, UV_EOF, + UV_EADDRINFO, UV_EACCESS, UV_EAGAIN, UV_EADDRINUSE, @@ -261,7 +262,7 @@ struct uv_err_s { * the error code. */ uv_err_t uv_last_error(uv_loop_t*); -char* uv_strerror(uv_err_t err); +const char* uv_strerror(uv_err_t err); const char* uv_err_name(uv_err_t err); diff --git a/src/unix/core.c b/src/unix/core.c index 27e949e9..88e9bfc8 100644 --- a/src/unix/core.c +++ b/src/unix/core.c @@ -594,8 +594,8 @@ static int uv_getaddrinfo_done(eio_req* req) { free(handle->hostname); if (handle->retcode != 0) { - /* TODO how to display gai error strings? */ - uv__set_sys_error(handle->loop, handle->retcode); + handle->loop->last_err.code = UV_EADDRINFO; + handle->loop->last_err.sys_errno_ = handle->retcode; } handle->cb(handle, handle->retcode, res); diff --git a/src/unix/error.c b/src/unix/error.c index c469fbb8..935a83b4 100644 --- a/src/unix/error.c +++ b/src/unix/error.c @@ -118,7 +118,7 @@ uv_err_code uv_translate_sys_error(int sys_errno) { * a) rely on what the system provides us * b) reverse-map the error codes */ -char* uv_strerror(uv_err_t err) { +const char* uv_strerror(uv_err_t err) { int errorno; if (err.sys_errno_) @@ -126,6 +126,9 @@ char* uv_strerror(uv_err_t err) { else errorno = uv__translate_lib_error(err.code); + if (err.code == UV_EADDRINFO) + return gai_strerror(errorno); + if (errorno == -1) return "Unknown error"; else diff --git a/src/uv-common.c b/src/uv-common.c index b42c761e..ffad8d15 100644 --- a/src/uv-common.c +++ b/src/uv-common.c @@ -53,6 +53,7 @@ const char* uv_err_name(uv_err_t err) { case UV_UNKNOWN: return "UNKNOWN"; case UV_OK: return "OK"; case UV_EOF: return "EOF"; + case UV_EADDRINFO: return "EADDRINFO"; case UV_EACCESS: return "EACCESS"; case UV_EAGAIN: return "EAGAIN"; case UV_EADDRINUSE: return "EADDRINUSE"; diff --git a/src/win/error.c b/src/win/error.c index a060b2b9..1c523227 100644 --- a/src/win/error.c +++ b/src/win/error.c @@ -70,7 +70,7 @@ void uv_fatal_error(const int errorno, const char* syscall) { /* TODO: thread safety */ static char* last_err_str_ = NULL; -char* uv_strerror(uv_err_t err) { +const char* uv_strerror(uv_err_t err) { if (last_err_str_ != NULL) { LocalFree(last_err_str_); }