From f73ebbf68989103ed6ec888a6fbff68c21c379c0 Mon Sep 17 00:00:00 2001 From: Sergey Lyubka Date: Wed, 22 Sep 2021 18:52:42 +0100 Subject: [PATCH] Fix #1354 - report correct errno in mg_open_listener() --- mongoose.c | 5 ++++- src/sock.c | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/mongoose.c b/mongoose.c index f9eb8001..e1871067 100644 --- a/mongoose.c +++ b/mongoose.c @@ -2973,6 +2973,7 @@ static void mg_set_non_blocking_mode(SOCKET fd) { SOCKET mg_open_listener(const char *url, struct mg_addr *addr) { SOCKET fd = INVALID_SOCKET; + int s_err = 0; // Memoized socket error, in case closesocket() overrides it memset(addr, 0, sizeof(*addr)); addr->port = mg_htons(mg_url_port(url)); if (!mg_aton(mg_url_host(url), addr)) { @@ -3020,12 +3021,14 @@ SOCKET mg_open_listener(const char *url, struct mg_addr *addr) { } mg_set_non_blocking_mode(fd); } else if (fd != INVALID_SOCKET) { + s_err = MG_SOCK_ERRNO; closesocket(fd); fd = INVALID_SOCKET; } } if (fd == INVALID_SOCKET) { - LOG(LL_ERROR, ("Failed to listen on %s, errno %d", url, MG_SOCK_ERRNO)); + if (s_err = 0) s_err = MG_SOCK_ERRNO; + LOG(LL_ERROR, ("Failed to listen on %s, errno %d", url, s_err)); } return fd; diff --git a/src/sock.c b/src/sock.c index f72bd5b6..4accc934 100644 --- a/src/sock.c +++ b/src/sock.c @@ -127,6 +127,7 @@ static void mg_set_non_blocking_mode(SOCKET fd) { SOCKET mg_open_listener(const char *url, struct mg_addr *addr) { SOCKET fd = INVALID_SOCKET; + int s_err = 0; // Memoized socket error, in case closesocket() overrides it memset(addr, 0, sizeof(*addr)); addr->port = mg_htons(mg_url_port(url)); if (!mg_aton(mg_url_host(url), addr)) { @@ -174,12 +175,14 @@ SOCKET mg_open_listener(const char *url, struct mg_addr *addr) { } mg_set_non_blocking_mode(fd); } else if (fd != INVALID_SOCKET) { + s_err = MG_SOCK_ERRNO; closesocket(fd); fd = INVALID_SOCKET; } } if (fd == INVALID_SOCKET) { - LOG(LL_ERROR, ("Failed to listen on %s, errno %d", url, MG_SOCK_ERRNO)); + if (s_err = 0) s_err = MG_SOCK_ERRNO; + LOG(LL_ERROR, ("Failed to listen on %s, errno %d", url, s_err)); } return fd;