diff options
-rw-r--r-- | src/util.c | 31 | ||||
-rw-r--r-- | src/util.h | 5 |
2 files changed, 36 insertions, 0 deletions
diff --git a/src/util.c b/src/util.c index 277806721..9956b8da0 100644 --- a/src/util.c +++ b/src/util.c @@ -280,6 +280,37 @@ make_unix_socket (const gchar *path, struct sockaddr_un *addr, gboolean is_serve } gint +make_socketpair (gint pair[2]) +{ + gint s_error, r, optlen, serrno, on = 1; + + r = socketpair (PF_LOCAL, SOCK_STREAM, 0, pair); + + if (r == -1) { + msg_warn ("socketpair failed: %d, '%s'", errno, strerror (errno)); + return -1; + } + /* Set close on exec */ + if (fcntl (pair[0], F_SETFD, FD_CLOEXEC) == -1) { + msg_warn ("fcntl failed: %d, '%s'", errno, strerror (errno)); + goto out; + } + if (fcntl (pair[1], F_SETFD, FD_CLOEXEC) == -1) { + msg_warn ("fcntl failed: %d, '%s'", errno, strerror (errno)); + goto out; + } + + return 0; + +out: + serrno = errno; + close (pair[0]); + close (pair[1]); + errno = serrno; + return (-1); +} + +gint write_pid (struct rspamd_main *main) { pid_t pid; diff --git a/src/util.h b/src/util.h index 3e5985d1b..7a5a00915 100644 --- a/src/util.h +++ b/src/util.h @@ -47,6 +47,11 @@ gint accept_from_socket (gint listen_sock, struct sockaddr *addr, socklen_t *len gint make_unix_socket (const gchar *, struct sockaddr_un *, gboolean is_server); /* + * Create socketpair + */ +gint make_socketpair (gint pair[2]); + +/* * Write pid to file */ gint write_pid (struct rspamd_main *); |