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:
parent
0e1aaf4e78
commit
09e266e6f5
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue