From ae8422e3040239f631dcb7ee6ae10067f515a04a Mon Sep 17 00:00:00 2001 From: "Sergio R. Caprile" Date: Thu, 8 May 2025 13:40:02 -0300 Subject: [PATCH] fix broken TCP closure --- mongoose.c | 2 +- src/net_builtin.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mongoose.c b/mongoose.c index a1362b62..6829923c 100644 --- a/mongoose.c +++ b/mongoose.c @@ -4338,6 +4338,7 @@ static void settmout(struct mg_connection *c, uint8_t type) { : type == MIP_TTYPE_SYN ? MIP_TCP_SYN_MS : type == MIP_TTYPE_FIN ? MIP_TCP_FIN_MS : MIP_TCP_KEEPALIVE_MS; + if (s->ttype == MIP_TTYPE_FIN) return; // skip if 3-way closing s->timer = ifp->now + n; s->ttype = type; MG_VERBOSE(("%lu %d -> %llx", c->id, type, s->timer)); @@ -5361,7 +5362,6 @@ void mg_mgr_poll(struct mg_mgr *mgr, int ms) { if (s->twclosure && (!c->is_tls || (c->rtls.len == 0 && mg_tls_pending(c) == 0))) c->is_closing = 1; - if (c->is_draining && c->send.len == 0) c->is_closing = 1; if (c->is_closing) close_conn(c); } (void) ms; diff --git a/src/net_builtin.c b/src/net_builtin.c index c486e110..a1a24f6e 100644 --- a/src/net_builtin.c +++ b/src/net_builtin.c @@ -176,6 +176,7 @@ static void settmout(struct mg_connection *c, uint8_t type) { : type == MIP_TTYPE_SYN ? MIP_TCP_SYN_MS : type == MIP_TTYPE_FIN ? MIP_TCP_FIN_MS : MIP_TCP_KEEPALIVE_MS; + if (s->ttype == MIP_TTYPE_FIN) return; // skip if 3-way closing s->timer = ifp->now + n; s->ttype = type; MG_VERBOSE(("%lu %d -> %llx", c->id, type, s->timer)); @@ -1199,7 +1200,6 @@ void mg_mgr_poll(struct mg_mgr *mgr, int ms) { if (s->twclosure && (!c->is_tls || (c->rtls.len == 0 && mg_tls_pending(c) == 0))) c->is_closing = 1; - if (c->is_draining && c->send.len == 0) c->is_closing = 1; if (c->is_closing) close_conn(c); } (void) ms;