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.
This commit is contained in:
Willy Tarreau 2023-02-27 16:40:54 +01:00
parent 0e1aaf4e78
commit 09e266e6f5
2 changed files with 8 additions and 0 deletions

View File

@ -603,6 +603,9 @@ int tcp_bind_listener(struct listener *listener, char *errmsg, int errlen)
goto tcp_return; goto tcp_return;
} }
if (listener->rx.flags & RX_F_MUST_DUP)
goto done;
fd = listener->rx.fd; fd = listener->rx.fd;
if (listener->bind_conf->options & BC_O_NOLINGER) 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)); setsockopt(fd, IPPROTO_TCP, TCP_QUICKACK, &one, sizeof(one));
#endif #endif
done:
/* the socket is ready */ /* the socket is ready */
listener_set_state(listener, LI_LISTEN); listener_set_state(listener, LI_LISTEN);
goto tcp_return; goto tcp_return;

View File

@ -124,6 +124,9 @@ static int uxst_bind_listener(struct listener *listener, char *errmsg, int errle
goto uxst_return; goto uxst_return;
} }
if (listener->rx.flags & RX_F_MUST_DUP)
goto done;
fd = listener->rx.fd; fd = listener->rx.fd;
ready = sock_accepting_conn(&listener->rx) > 0; 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; goto uxst_close_return;
} }
done:
/* the socket is now listening */ /* the socket is now listening */
listener_set_state(listener, LI_LISTEN); listener_set_state(listener, LI_LISTEN);
return err; return err;