From 09e266e6f551daa6ed3cacfb59335d221cf7c83d Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Mon, 27 Feb 2023 16:40:54 +0100 Subject: [PATCH] MINOR: proto: skip socket setup for duped FDs It's not strictly necessary, but it's still better to avoid setting up the same socket multiple times when it's being duplicated to a few FDs. We don't change that for inherited ones however since they may really need to be set up, so we only skip duplicated ones. --- src/proto_tcp.c | 4 ++++ src/proto_uxst.c | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/proto_tcp.c b/src/proto_tcp.c index 4691e165a5..2e5c36a51e 100644 --- a/src/proto_tcp.c +++ b/src/proto_tcp.c @@ -603,6 +603,9 @@ int tcp_bind_listener(struct listener *listener, char *errmsg, int errlen) goto tcp_return; } + if (listener->rx.flags & RX_F_MUST_DUP) + goto done; + fd = listener->rx.fd; if (listener->bind_conf->options & BC_O_NOLINGER) @@ -723,6 +726,7 @@ int tcp_bind_listener(struct listener *listener, char *errmsg, int errlen) setsockopt(fd, IPPROTO_TCP, TCP_QUICKACK, &one, sizeof(one)); #endif + done: /* the socket is ready */ listener_set_state(listener, LI_LISTEN); goto tcp_return; diff --git a/src/proto_uxst.c b/src/proto_uxst.c index ed1fa53efd..7988e00d15 100644 --- a/src/proto_uxst.c +++ b/src/proto_uxst.c @@ -124,6 +124,9 @@ static int uxst_bind_listener(struct listener *listener, char *errmsg, int errle goto uxst_return; } + if (listener->rx.flags & RX_F_MUST_DUP) + goto done; + fd = listener->rx.fd; ready = sock_accepting_conn(&listener->rx) > 0; @@ -134,6 +137,7 @@ static int uxst_bind_listener(struct listener *listener, char *errmsg, int errle goto uxst_close_return; } + done: /* the socket is now listening */ listener_set_state(listener, LI_LISTEN); return err;