]> source.dussan.org Git - rspamd.git/commitdiff
Update socketpair utility function.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 8 Oct 2015 16:22:37 +0000 (17:22 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 8 Oct 2015 16:22:37 +0000 (17:22 +0100)
src/libutil/util.c
src/libutil/util.h

index dae26a5c0c087552a26d7fcaaadda8870fa0c18f..bc723464f258965a038a9cfd2c407092f5ee80b7 100644 (file)
@@ -571,18 +571,30 @@ err:
        return NULL;
 }
 
-gint
+gboolean
 rspamd_socketpair (gint pair[2])
 {
-       gint r;
+       gint r, serrno;
 
-       r = socketpair (AF_LOCAL, SOCK_STREAM, 0, pair);
+#ifdef HAVE_SOCK_SEQPACKET
+       r = socketpair (AF_LOCAL, SOCK_SEQPACKET, 0, pair);
+
+       if (r == -1) {
+               msg_warn ("seqpacket socketpair failed: %d, '%s'",
+                               errno,
+                               strerror (errno));
+               r = socketpair (AF_LOCAL, SOCK_DGRAM, 0, pair);
+       }
+#else
+       r = socketpair (AF_LOCAL, SOCK_DGRAM, 0, pair);
+#endif
 
        if (r == -1) {
                msg_warn ("socketpair failed: %d, '%s'", errno, strerror (
                                errno), pair[0], pair[1]);
                return -1;
        }
+
        /* Set close on exec */
        if (fcntl (pair[0], F_SETFD, FD_CLOEXEC) == -1) {
                msg_warn ("fcntl failed: %d, '%s'", errno, strerror (errno));
@@ -593,12 +605,15 @@ rspamd_socketpair (gint pair[2])
                goto out;
        }
 
-       return 0;
+       return TRUE;
 
 out:
+       serrno = errno;
        close (pair[0]);
        close (pair[1]);
-       return (-1);
+       errno = serrno;
+
+       return FALSE;
 }
 
 gint
index e563718f8bf7c32d8d3deca336eeea0b060e882c..bf55f901f18837da396eb97f9e5ed4e99d3bed77 100644 (file)
@@ -74,7 +74,7 @@ GList * rspamd_sockets_list (const gchar *credits,
 /*
  * Create socketpair
  */
-gint rspamd_socketpair (gint pair[2]);
+gboolean rspamd_socketpair (gint pair[2]);
 
 /*
  * Write pid to file