Comment by jandrese
3 years ago
This seems like it should be very simple to fix without having to do much to the API. Just implement a flush() function for TCP sockets that tells the stack to kick the current buffer out to the wire immediately. It seems so obvious that I think I must be missing something. Why didn't this appear in the 80s?
It’s not portable but Linux has a TCP_CORK socket option that does this.
Here's how to emulate TCP_CORK using TCP_NODELAY, from [0]:
- unset the TCP_NODELAY flag on the socket
- Call send() zero or more times to add your outgoing data into the Nagle-queue
- set the TCP_NODELAY flag on the socket
- call send() with the number-of-bytes argument set to zero, to force an immediate send of the Nagle-queued data
[0] https://stackoverflow.com/a/22118709
Wow, that's not awkward at all.