From a844115043fe5d7cfaf15f9818b9c410e1f33b89 Mon Sep 17 00:00:00 2001 From: valenok Date: Fri, 24 Jun 2011 08:31:37 +0100 Subject: [PATCH] close_socket_gracefully(): set linger option to prevent port exhaustion --- mongoose.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mongoose.c b/mongoose.c index c7337c03..14f34be9 100644 --- a/mongoose.c +++ b/mongoose.c @@ -3691,8 +3691,15 @@ static void reset_per_request_attributes(struct mg_connection *conn) { static void close_socket_gracefully(SOCKET sock) { char buf[BUFSIZ]; + struct linger linger; int n; + // Set linger option to avoid socket hanging out after close. This prevent + // ephemeral port exhaust problem under high QPS. + linger.l_onoff = 1; + linger.l_linger = 1; + setsockopt(sock, SOL_SOCKET, SO_LINGER, &linger, sizeof(linger)); + // Send FIN to the client (void) shutdown(sock, SHUT_WR); set_non_blocking_mode(sock);