MEDIUM: proto_sockpair: make use of sockpair_bind_receiver()

Now we rely on the address family's receiver instead of binding everything
ourselves.
This commit is contained in:
Willy Tarreau 2020-09-02 18:02:00 +02:00
parent 62292b28a3
commit 9eda7a6d62

View 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) static int sockpair_bind_listener(struct listener *listener, char *errmsg, int errlen)
{ {
int fd = listener->rx.fd;
int err; int err;
const char *msg = NULL; char *msg = NULL;
err = ERR_NONE; err = ERR_NONE;
@ -163,38 +162,18 @@ static int sockpair_bind_listener(struct listener *listener, char *errmsg, int e
if (listener->state != LI_ASSIGNED) if (listener->state != LI_ASSIGNED)
return ERR_NONE; /* already bound */ return ERR_NONE; /* already bound */
if (listener->rx.flags & RX_F_BOUND) err = sockpair_bind_receiver(&listener->rx, listener->rx.proto->accept, &msg);
goto bound; if (err != ERR_NONE) {
snprintf(errmsg, errlen, "%s", msg);
if (listener->rx.fd == -1) { free(msg); msg = NULL;
err |= ERR_FATAL | ERR_ALERT; return err;
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;
}
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; listener->state = LI_LISTEN;
fd_insert(fd, listener, listener->rx.proto->accept,
thread_mask(listener->rx.settings->bind_thread) & all_threads_mask);
return err; return err;
err_return: err_return:
if (msg && errlen) if (msg && errlen)
snprintf(errmsg, errlen, "%s [fd %d]", msg, fd); snprintf(errmsg, errlen, "%s [fd %d]", msg, listener->rx.fd);
return err; return err;
} }