diff --git a/src/lib/fastcgi.c b/src/lib/fastcgi.c index f77f06a..d38def3 100644 --- a/src/lib/fastcgi.c +++ b/src/lib/fastcgi.c @@ -82,7 +82,9 @@ int fastcgi_init(fastcgi_cnx_t *conn, int mode, unsigned int req_num, const sock conn->webroot = uri->webroot; conn->err = NULL; conn->fd_err_bytes = 0; - sock_init(&conn->out, 0, SOCK_PIPE); + conn->fd_out = -1; + conn->fd_err = -1; + sock_init(&conn->out, -1, SOCK_PIPE); conn->socket.enc = 0; if ((conn->socket.socket = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { @@ -205,11 +207,11 @@ int fastcgi_close_cnx(fastcgi_cnx_t *cnx) { if (cnx->err) fclose(cnx->err); cnx->err = NULL; - if (cnx->socket.socket) sock_close(&cnx->socket); + sock_close(&cnx->socket); sock_close(&cnx->out); - close(cnx->fd_err); - close(cnx->fd_out); + if (cnx->fd_err != -1) close(cnx->fd_err); + if (cnx->fd_out != -1) close(cnx->fd_out); errno = e; return 0; diff --git a/src/lib/sock.c b/src/lib/sock.c index 00e77dd..aef28a2 100644 --- a/src/lib/sock.c +++ b/src/lib/sock.c @@ -379,7 +379,7 @@ int sock_close(sock *s) { SSL_free(s->ssl); s->ssl = NULL; } - close(s->socket); + if (s->socket != -1) close(s->socket); s->socket = -1; s->enc = 0, s->pipe = 0; errno = e; diff --git a/src/worker/fastcgi_handler.c b/src/worker/fastcgi_handler.c index 2cd0c6a..464bad8 100644 --- a/src/worker/fastcgi_handler.c +++ b/src/worker/fastcgi_handler.c @@ -58,7 +58,7 @@ static int fastcgi_handler_1(client_ctx_t *ctx, fastcgi_cnx_t **fcgi_cnx) { } fastcgi_cnx_t fcgi_cnx_buf; - sock_init(&fcgi_cnx_buf.socket, 0, 0); + sock_init(&fcgi_cnx_buf.socket, -1, 0); fcgi_cnx_buf.req_id = 0; fcgi_cnx_buf.r_addr = ctx->socket.addr; fcgi_cnx_buf.r_host = (ctx->host[0] != 0) ? ctx->host : NULL;