]> source.dussan.org Git - rspamd.git/commitdiff
Add make_socketpair utility function.
authorVsevolod Stakhov <vsevolod@rambler-co.ru>
Thu, 13 Oct 2011 11:32:37 +0000 (15:32 +0400)
committerVsevolod Stakhov <vsevolod@rambler-co.ru>
Thu, 13 Oct 2011 11:32:37 +0000 (15:32 +0400)
src/util.c
src/util.h

index 277806721a7030434cca1ad6d72fc709bf267656..9956b8da0687c24ce96bf83667e7674473277a83 100644 (file)
@@ -279,6 +279,37 @@ make_unix_socket (const gchar *path, struct sockaddr_un *addr, gboolean is_serve
        return (-1);
 }
 
+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)
 {
index 3e5985d1bfc9e42645ce94665a415c2f66b3b591..7a5a00915c26fe865b743e73bb89d7c7f5d4b2fa 100644 (file)
@@ -46,6 +46,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
  */