diff options
author | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2009-03-03 14:31:51 +0300 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2009-03-03 14:31:51 +0300 |
commit | 5424cc32d47c5e98b9edfb2b342d9d98d97a1175 (patch) | |
tree | bd4a0d4418b71d0024f5d66d07de2cc24aded7ec /src/plugins | |
parent | 3ff032cf72164dc9aa8575c0a631f7c7b0079f46 (diff) | |
download | rspamd-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/plugins')
-rw-r--r-- | src/plugins/surbl.c | 24 |
1 files changed, 5 insertions, 19 deletions
diff --git a/src/plugins/surbl.c b/src/plugins/surbl.c index 1e466719c..6798d17e4 100644 --- a/src/plugins/surbl.c +++ b/src/plugins/surbl.c @@ -596,33 +596,19 @@ redirector_callback (int fd, short what, void *arg) static void register_redirector_call (struct uri *url, struct worker_task *task) { - struct sockaddr_in sc; - int ofl, r, s; + int s; struct redirector_param *param; struct timeval timeout; - bzero (&sc, sizeof (struct sockaddr_in *)); - sc.sin_family = AF_INET; - sc.sin_port = htons (surbl_module_ctx->redirector_port); - memcpy (&sc.sin_addr, &surbl_module_ctx->redirector_addr, sizeof (struct in_addr)); - - s = socket (PF_INET, SOCK_STREAM, 0); + s = make_tcp_socket (&surbl_module_ctx->redirector_addr, htons (surbl_module_ctx->redirector_port), FALSE); if (s == -1) { - msg_info ("register_redirector_call: socket() failed: %s", strerror (errno)); + msg_info ("register_redirector_call: cannot create tcp socket failed: %s", strerror (errno)); + task->save.saved --; + make_surbl_requests (url, task); return; } - /* set nonblocking */ - ofl = fcntl (s, F_GETFL, 0); - fcntl (s, F_SETFL, ofl | O_NONBLOCK); - - if ((r = connect (s, (struct sockaddr*)&sc, sizeof (struct sockaddr_in))) == -1) { - if (errno != EINPROGRESS) { - close (s); - msg_info ("register_redirector_call: connect() failed: %s", strerror (errno)); - } - } param = memory_pool_alloc (task->task_pool, sizeof (struct redirector_param)); param->url = url; param->task = task; |