Commit 292de17c authored by Satadru Pan's avatar Satadru Pan Committed by woo

apply all sockopts to listening sockets

Summary:
We want all socket options to be applied to the listen sockets too.

The old code here that only applied SO_KEEPALIVE is a bit superstitious.
Not all options will be inherited by accept()ed sockets, but that's
fine.  We set them again post-accept().

Applying all these options to the listening sockets will fix at least
one long standing bug, which is that QoS is not set correctly for the
first few packets in a flow.  This also will let us do the right thing
when we gain the ability to set TCP_MAXSEG in D1741753.

Test Plan: fbmake runtests & canary in prod

Reviewed By: afrind@fb.com, davejwatson@fb.com

Subscribers: jsedgwick, satadru, trunkagent, fugalh, exa, folly-diffs@, agartrell

FB internal diff: D1745182

Tasks: 2911597

Signature: t1:1745182:1418860157:045680a91b153482bcd4a014894fb28059955d06
parent 98c4cba4
......@@ -190,13 +190,13 @@ Acceptor::init(AsyncServerSocket* serverSocket,
if (serverSocket) {
serverSocket->addAcceptCallback(this, eventBase);
// SO_KEEPALIVE is the only setting that is inherited by accepted
// connections so only apply this setting
for (const auto& option: socketOptions_) {
if (option.first.level == SOL_SOCKET &&
option.first.optname == SO_KEEPALIVE && option.second == 1) {
serverSocket->setKeepAliveEnabled(true);
break;
for (auto& fd : serverSocket->getSockets()) {
if (fd < 0) {
continue;
}
for (const auto& opt: socketOptions_) {
opt.first.apply(fd, opt.second);
}
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment