diff options
-rw-r--r-- | fcgiwrap.c | 42 |
1 files changed, 24 insertions, 18 deletions
@@ -638,13 +638,35 @@ static void prefork(int nchildren) } } +static int listen_on_fd(int fd) { + int one = 1; + + if (listen(fd, 511) < 0) { + perror("Failed to listen"); + return -1; + } + if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof one) < 0) { + perror("Failed to enable SO_REUSEADDR"); + return -1; + } + if (dup2(fd, 0) < 0) { + perror("Failed to move socket to fd 0"); + return -1; + } + if (close(fd) < 0) { + perror("Failed to close original socket"); + return -1; + } + + return 0; +} + int setup_socket(char *url) { char *p = url; char *q; int fd; int port; size_t sockaddr_size; - int one = 1; union { struct sockaddr sa; @@ -718,24 +740,8 @@ invalid_url: perror("Failed to bind"); return -1; } - if (listen(fd, 511) < 0) { - perror("Failed to listen"); - return -1; - } - if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof one) < 0) { - perror("Failed to enable SO_REUSEADDR"); - return -1; - } - if (dup2(fd, 0) < 0) { - perror("Failed to move socket to fd 0"); - return -1; - } - if (close(fd) < 0) { - perror("Failed to close original socket"); - return -1; - } - return 0; + return listen_on_fd(fd); } int main(int argc, char **argv) |