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, ...@@ -190,13 +190,13 @@ Acceptor::init(AsyncServerSocket* serverSocket,
if (serverSocket) { if (serverSocket) {
serverSocket->addAcceptCallback(this, eventBase); serverSocket->addAcceptCallback(this, eventBase);
// SO_KEEPALIVE is the only setting that is inherited by accepted
// connections so only apply this setting for (auto& fd : serverSocket->getSockets()) {
for (const auto& option: socketOptions_) { if (fd < 0) {
if (option.first.level == SOL_SOCKET && continue;
option.first.optname == SO_KEEPALIVE && option.second == 1) { }
serverSocket->setKeepAliveEnabled(true); for (const auto& opt: socketOptions_) {
break; 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