From 255da78bedfc70feb3f48ed65bd5cea48b6218c1 Mon Sep 17 00:00:00 2001 From: Dmitry Frank <mail@dmitryfrank.com> Date: Tue, 30 Jan 2018 14:25:42 +0200 Subject: [PATCH] Fix socket leak when there are too many open fds CL: Mongoose Web Server: Fix socket leak when there are too many open file descriptors Fixes https://github.com/cesanta/mongoose/issues/870 PUBLISHED_FROM=c802b6834a54eca37821d46efde192c527e0a6b7 --- mongoose.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/mongoose.c b/mongoose.c index f80b4daf3..d61c2e163 100644 --- a/mongoose.c +++ b/mongoose.c @@ -3914,10 +3914,16 @@ time_t mg_socket_if_poll(struct mg_iface *iface, int timeout_ms) { /* A hack to make sure all our file descriptos fit into FD_SETSIZE. */ if (nc->sock >= (sock_t) FD_SETSIZE && try_dup) { int new_sock = dup(nc->sock); - if (new_sock >= 0 && new_sock < (sock_t) FD_SETSIZE) { - closesocket(nc->sock); - DBG(("new sock %d -> %d", nc->sock, new_sock)); - nc->sock = new_sock; + if (new_sock >= 0) { + if (new_sock < (sock_t) FD_SETSIZE) { + closesocket(nc->sock); + DBG(("new sock %d -> %d", nc->sock, new_sock)); + nc->sock = new_sock; + } else { + closesocket(new_sock); + DBG(("new sock is still larger than FD_SETSIZE, disregard")); + try_dup = 0; + } } else { try_dup = 0; } -- GitLab