aboutsummaryrefslogtreecommitdiffstats
path: root/src/worker.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>2009-03-03 14:31:51 +0300
committerVsevolod Stakhov <vsevolod@rambler-co.ru>2009-03-03 14:31:51 +0300
commit5424cc32d47c5e98b9edfb2b342d9d98d97a1175 (patch)
treebd4a0d4418b71d0024f5d66d07de2cc24aded7ec /src/worker.c
parent3ff032cf72164dc9aa8575c0a631f7c7b0079f46 (diff)
downloadrspamd-5424cc32d47c5e98b9edfb2b342d9d98d97a1175.tar.gz
rspamd-5424cc32d47c5e98b9edfb2b342d9d98d97a1175.zip
* 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
Diffstat (limited to 'src/worker.c')
-rw-r--r--src/worker.c16
1 files changed, 3 insertions, 13 deletions
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));