aboutsummaryrefslogtreecommitdiffstats
path: root/src/util.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>2009-03-24 19:59:41 +0300
committerVsevolod Stakhov <vsevolod@rambler-co.ru>2009-03-24 19:59:41 +0300
commitfb67ab386b508327054548533617a348427df4a6 (patch)
tree3030e113bc3cded11563eb0ae7a4ad21a51a4953 /src/util.c
parent56033466857544978d09dc4afa53c2eb359e8ea5 (diff)
downloadrspamd-fb67ab386b508327054548533617a348427df4a6.tar.gz
rspamd-fb67ab386b508327054548533617a348427df4a6.zip
* Polish socket utility functions
Diffstat (limited to 'src/util.c')
-rw-r--r--src/util.c38
1 files changed, 16 insertions, 22 deletions
diff --git a/src/util.c b/src/util.c
index 8c878844c..c4e85294a 100644
--- a/src/util.c
+++ b/src/util.c
@@ -26,13 +26,15 @@
#include "config.h"
#include "util.h"
#include "cfg_file.h"
+#include "main.h"
sig_atomic_t do_reopen_log = 0;
int
-event_make_socket_nonblocking (int fd)
+make_socket_nonblocking (int fd)
{
if (fcntl(fd, F_SETFL, O_NONBLOCK) == -1) {
+ msg_warn ("make_socket_nonblocking: fcntl failed: %d, '%s'", errno, strerror (errno));
return -1;
}
return 0;
@@ -41,33 +43,27 @@ event_make_socket_nonblocking (int fd)
int
make_tcp_socket (struct in_addr *addr, u_short port, gboolean is_server)
{
- struct linger linger;
- int fd, on = 1, r, optlen, s_error;
+ int fd, r, optlen, s_error;
int serrno;
struct sockaddr_in sin;
/* Create socket */
fd = socket (AF_INET, SOCK_STREAM, 0);
if (fd == -1) {
+ msg_warn ("make_tcp_socket: socket failed: %d, '%s'", errno, strerror (errno));
return -1;
}
- if (event_make_socket_nonblocking(fd) < 0) {
+ if (make_socket_nonblocking(fd) < 0) {
goto out;
}
/* Set close on exec */
if (fcntl (fd, F_SETFD, FD_CLOEXEC) == -1) {
+ msg_warn ("make_tcp_socket: fcntl failed: %d, '%s'", errno, strerror (errno));
goto out;
}
- /* Socket options */
- setsockopt (fd, SOL_SOCKET, SO_KEEPALIVE, (void *)&on, sizeof(on));
- setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, (void *)&on, sizeof(on));
- linger.l_onoff = 1;
- linger.l_linger = 5;
- setsockopt (fd, SOL_SOCKET, SO_LINGER, (void *)&linger, sizeof(linger));
-
/* Bind options */
sin.sin_family = AF_INET;
sin.sin_port = htons (port);
@@ -82,6 +78,7 @@ make_tcp_socket (struct in_addr *addr, u_short port, gboolean is_server)
if (r == -1) {
if (errno != EINPROGRESS) {
+ msg_warn ("make_tcp_socket: bind/connect failed: %d, '%s'", errno, strerror (errno));
goto out;
}
}
@@ -108,29 +105,23 @@ make_tcp_socket (struct in_addr *addr, u_short port, gboolean is_server)
int
accept_from_socket (int listen_sock, struct sockaddr *addr, socklen_t *len)
{
- struct linger linger;
- int nfd, on = 1;
+ int nfd;
int serrno;
if ((nfd = accept (listen_sock, addr, len)) == -1) {
+ msg_warn ("accept_from_socket: accept failed: %d, '%s'", errno, strerror (errno));
return -1;
}
- if (event_make_socket_nonblocking(nfd) < 0) {
+ if (make_socket_nonblocking(nfd) < 0) {
goto out;
}
/* Set close on exec */
if (fcntl (nfd, F_SETFD, FD_CLOEXEC) == -1) {
+ msg_warn ("accept_from_socket: fcntl failed: %d, '%s'", errno, strerror (errno));
goto out;
}
- /* 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));
-
return (nfd);
out:
@@ -160,15 +151,17 @@ make_unix_socket (const char *path, struct sockaddr_un *addr, gboolean is_server
fd = socket (PF_LOCAL, SOCK_STREAM, 0);
if (fd == -1) {
+ msg_warn ("make_unix_socket: socket failed: %d, '%s'", errno, strerror (errno));
return -1;
}
- if (event_make_socket_nonblocking(fd) < 0) {
+ if (make_socket_nonblocking(fd) < 0) {
goto out;
}
/* Set close on exec */
if (fcntl (fd, F_SETFD, FD_CLOEXEC) == -1) {
+ msg_warn ("make_unix_socket: fcntl failed: %d, '%s'", errno, strerror (errno));
goto out;
}
if (is_server) {
@@ -180,6 +173,7 @@ make_unix_socket (const char *path, struct sockaddr_un *addr, gboolean is_server
if (r == -1) {
if (errno != EINPROGRESS) {
+ msg_warn ("make_unix_socket: bind/connect failed: %d, '%s'", errno, strerror (errno));
goto out;
}
}