aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
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/plugins
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/plugins')
-rw-r--r--src/plugins/surbl.c24
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;