diff --git a/mongoose.c b/mongoose.c index 636e0bac..50203103 100644 --- a/mongoose.c +++ b/mongoose.c @@ -3299,6 +3299,13 @@ static void http_cb(struct mg_connection *c, int ev, void *ev_data) { if (c->is_accepted) c->is_resp = 1; // Start generating response mg_call(c, MG_EV_HTTP_MSG, &hm); // User handler can clear is_resp + if (c->is_accepted) { + struct mg_str *cc = mg_http_get_header(&hm, "Connection"); + if (cc != NULL && mg_strcasecmp(*cc, mg_str("close")) == 0) { + c->is_draining = 1; // honor "Connection: close" + break; + } + } } if (ofs > 0) mg_iobuf_del(&c->recv, 0, ofs); // Delete processed data } diff --git a/src/http.c b/src/http.c index 1f6b39d4..cb8013f1 100644 --- a/src/http.c +++ b/src/http.c @@ -1083,6 +1083,13 @@ static void http_cb(struct mg_connection *c, int ev, void *ev_data) { if (c->is_accepted) c->is_resp = 1; // Start generating response mg_call(c, MG_EV_HTTP_MSG, &hm); // User handler can clear is_resp + if (c->is_accepted) { + struct mg_str *cc = mg_http_get_header(&hm, "Connection"); + if (cc != NULL && mg_strcasecmp(*cc, mg_str("close")) == 0) { + c->is_draining = 1; // honor "Connection: close" + break; + } + } } if (ofs > 0) mg_iobuf_del(&c->recv, 0, ofs); // Delete processed data }