Darshit Shah wrote:
2. Regarding the socket options, we should spend some more time
evaluating our options. My understanding of TCP_CORK is that it may
be a useful option for Servers, but it doesn't really affect TCP
clients in any useful way. This is because TCP_CORK modifies the
minimum TCP packet size by buffering for as much data before sending
it out. With the small request sizes that a HTTP client would
generally send, I think it is better to follow Nagle's algorithm,
since TCP_CORK will not afford us any noticeable advantage. On the
other hand, it's non-portability will be a nightmare for us when
trying to support OSX, BSD and Windows.
Most requests won't need TCP_CORK, as the request is already small
enough to fit in a single packet (however, it may still be useful for
providing the needed TFO hints to the kernel).
Setting and unsetting a setsockopt is a couple of calls than can easily
be hidden behind a #ifdef. Changing the whole application to sendto() is
mucho more invasive, and I would be quite surprised if it worked cleanly
in Windows.
(In addition to TFO already being Linux-only :P)