From 5424cc32d47c5e98b9edfb2b342d9d98d97a1175 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Tue, 3 Mar 2009 14:31:51 +0300 Subject: * Unify socket creation and accepting by using utility functions * Check SO_ERROR on socket immideately after connect/bind to avoid resourses allocation for unsuccessful connections * Avoid descriptors leakage when we create sockets and have errors on them * Set on all socket descriptors FD_CLOEXEC flag to avoid problems with executing LDA --- src/worker.c | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) (limited to 'src/worker.c') diff --git a/src/worker.c b/src/worker.c index dee49ef4d..8e1225024 100644 --- a/src/worker.c +++ b/src/worker.c @@ -215,22 +215,12 @@ accept_socket (int fd, short what, void *arg) struct sockaddr_storage ss; struct worker_task *new_task; socklen_t addrlen = sizeof(ss); - int nfd, on = 1; - struct linger linger; + int nfd; - if ((nfd = accept (fd, (struct sockaddr *)&ss, &addrlen)) == -1) { + if ((nfd = accept_from_socket (fd, (struct sockaddr *)&ss, &addrlen)) == -1) { + msg_warn ("accept_socket: accept failed: %s", strerror (errno)); return; } - if (event_make_socket_nonblocking(fd) < 0) { - return; - } - - /* Socket options */ - setsockopt (nfd, SOL_SOCKET, SO_KEEPALIVE, (void *)&on, sizeof(on)); - setsockopt (nfd, SOL_SOCKET, SO_REUSEADDR, (void *)&on, sizeof(on)); - linger.l_onoff = 1; - linger.l_linger = 2; - setsockopt (nfd, SOL_SOCKET, SO_LINGER, (void *)&linger, sizeof(linger)); new_task = g_malloc (sizeof (struct worker_task)); -- cgit v1.2.3