소스 검색

Experiment with OSX linger support

bel 8 년 전
부모
커밋
a018780c25
1개의 변경된 파일7개의 추가작업 그리고 3개의 파일을 삭제
  1. 7 3
      src/civetweb.c

+ 7 - 3
src/civetweb.c

@@ -12333,7 +12333,7 @@ close_socket_gracefully(struct mg_connection *conn)
 #endif
 	struct linger linger;
 	int error_code = 0;
-	int linger_timeout = -1;
+	int linger_timeout = -2;
 	socklen_t opt_len = sizeof(error_code);
 
 	if (!conn) {
@@ -12370,7 +12370,9 @@ close_socket_gracefully(struct mg_connection *conn)
 	linger.l_onoff = (linger_timeout >= 0);
 	linger.l_linger = (linger_timeout + 999) / 1000;
 
-	if (getsockopt(conn->client.sock,
+	if (linger_timeout < -1) {
+        /* Default: don't configure any linger */
+    } else if (getsockopt(conn->client.sock,
 	               SOL_SOCKET,
 	               SO_ERROR,
 	               (char *)&error_code,
@@ -12393,8 +12395,10 @@ close_socket_gracefully(struct mg_connection *conn)
 		               (char *)&linger,
 		               sizeof(linger)) != 0) {
 			mg_cry(conn,
-			       "%s: setsockopt(SOL_SOCKET SO_LINGER) failed: %s",
+			       "%s: setsockopt(SOL_SOCKET SO_LINGER(%i,%i)) failed: %s",
 			       __func__,
+                   linger.l_onoff,
+                   linger.l_linger,
 			       strerror(ERRNO));
 		}
 	}