Forráskód Böngészése

close_socket_gracefully(): set linger option to prevent port exhaustion

valenok 14 éve
szülő
commit
a844115043
1 módosított fájl, 7 hozzáadás és 0 törlés
  1. 7 0
      mongoose.c

+ 7 - 0
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);