]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: proto_sockpair: make use of sockpair_bind_receiver()
authorWilly Tarreau <w@1wt.eu>
Wed, 2 Sep 2020 16:02:00 +0000 (18:02 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 16 Sep 2020 20:08:07 +0000 (22:08 +0200)
Now we rely on the address family's receiver instead of binding everything
ourselves.

src/proto_sockpair.c

index de28faf7acdecfcbd68c1dcd051b5d80f4bb9f46..00fce76cbff73b03e2ce65db2ba3bd9707daa30b 100644 (file)
@@ -150,9 +150,8 @@ int sockpair_bind_receiver(struct receiver *rx, void (*handler)(int fd), char **
  */
 static int sockpair_bind_listener(struct listener *listener, char *errmsg, int errlen)
 {
-       int fd = listener->rx.fd;
        int err;
-       const char *msg = NULL;
+       char *msg = NULL;
 
        err = ERR_NONE;
 
@@ -163,38 +162,18 @@ static int sockpair_bind_listener(struct listener *listener, char *errmsg, int e
        if (listener->state != LI_ASSIGNED)
                return ERR_NONE; /* already bound */
 
-       if (listener->rx.flags & RX_F_BOUND)
-               goto bound;
-
-       if (listener->rx.fd == -1) {
-               err |= ERR_FATAL | ERR_ALERT;
-               msg = "sockpair can be only used with inherited FDs";
-               goto err_return;
-       }
-
-       if (fd >= global.maxsock) {
-               err |= ERR_FATAL | ERR_ALERT;
-               msg = "socket(): not enough free sockets, raise -n argument";
-               goto err_return;
+       err = sockpair_bind_receiver(&listener->rx, listener->rx.proto->accept, &msg);
+       if (err != ERR_NONE) {
+               snprintf(errmsg, errlen, "%s", msg);
+               free(msg); msg = NULL;
+               return err;
        }
-       if (fcntl(fd, F_SETFL, O_NONBLOCK) == -1) {
-               err |= ERR_FATAL | ERR_ALERT;
-               msg = "cannot make sockpair non-blocking";
-               goto err_return;
-       }
-       listener->rx.flags |= RX_F_BOUND;
-
- bound:
        listener->state = LI_LISTEN;
-
-       fd_insert(fd, listener, listener->rx.proto->accept,
-                 thread_mask(listener->rx.settings->bind_thread) & all_threads_mask);
-
        return err;
 
  err_return:
        if (msg && errlen)
-               snprintf(errmsg, errlen, "%s [fd %d]", msg, fd);
+               snprintf(errmsg, errlen, "%s [fd %d]", msg, listener->rx.fd);
        return err;
 }