From: Willy Tarreau Date: Wed, 2 Sep 2020 16:02:00 +0000 (+0200) Subject: MEDIUM: proto_sockpair: make use of sockpair_bind_receiver() X-Git-Tag: v2.3-dev5~49 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9eda7a6d62bbf4a01f12ef98c812bdae9b3c974b;p=thirdparty%2Fhaproxy.git MEDIUM: proto_sockpair: make use of sockpair_bind_receiver() Now we rely on the address family's receiver instead of binding everything ourselves. --- diff --git a/src/proto_sockpair.c b/src/proto_sockpair.c index de28faf7ac..00fce76cbf 100644 --- a/src/proto_sockpair.c +++ b/src/proto_sockpair.c @@ -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; }