src/server/daemon/sessionhandler.c

changeset 169
76c96ee18221
parent 162
b169992137a8
child 171
af7e2d80dee6
--- a/src/server/daemon/sessionhandler.c	Mon Jan 30 20:54:20 2017 +0100
+++ b/src/server/daemon/sessionhandler.c	Sat Feb 04 10:06:25 2017 +0100
@@ -55,7 +55,12 @@
 }
 
 void connection_close(Connection *conn) {
-    close(conn->fd);
+    while(close(conn->fd)) {
+        if(errno != EINTR) {
+            log_ereport(LOG_VERBOSE, "connection close failed: %s", strerror(errno));
+            break;
+        }
+    }
 }
 
 int connection_ssl_read(Connection *conn, void *buf, int len) {
@@ -82,7 +87,12 @@
             log_ereport(LOG_VERBOSE, "SSL_shutdown failed: %d", conn->ssl_error);
         }
     }
-    close(conn->fd);
+    while(close(conn->fd)) {
+        if(errno != EINTR) {
+            log_ereport(LOG_VERBOSE, "connection close failed: %s", strerror(errno));
+            break;
+        }
+    }
 }
 
 void connection_destroy(Connection *conn) {
@@ -320,7 +330,7 @@
     int r = handle_request(request, NULL);
     if(r != 0) {
         // TODO: error message
-        close(request->connection->fd);
+        connection_destroy(request->connection);
     }
     
     /*

mercurial