--- 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); } /*