On Mon, 2010-10-11 at 03:30 +0200, Marcus Rueckert wrote:
On 2010-10-09 21:33:11 -0700, Ryan Murray wrote:
epoll_wait(8, {{EPOLLOUT, {u32=37481984, u64=37481984}}}, 38, 207) = 1 write(41, "iTxPBrNlaNFao+yQzLhuO4/+tQ5cuiKSe"..., 224) = 224 epoll_ctl(8, EPOLL_CTL_MOD, 41, {EPOLLIN|EPOLLPRI|EPOLLERR|EPOLLHUP, {u32=37481984, u64=37481984}}) = 0 pread(19, "AFABQAlAC0AJ\nQAUALQAUAFABQAlAC0AF"..., 8192, 811008) = 8192 setsockopt(41, SOL_TCP, TCP_CORK, [1], 4) = 0 write(41, "\r\nKUWtGCjKO5N8UbW5uYLZbS0nmaNi4ZB"..., 4134) = 4134 *snip* setsockopt(41, SOL_TCP, TCP_CORK, [0], 4) = 0
The TCP_CORK option should get set before the first call to write() there, rather than after the first pread().
there are 2 calls to setsocketopt for it. maybe you missed the first one?
One setting it on, and one setting it off, yes. The point of TCP_CORK is to set it on before _any_ write() calls, and off after the write calls. This allows the kernel to make TCP packets of MSS size, regardless of the size of your write()s. The write that occurs before enabling the cork causes a < MSS size packet to be sent, which increases the time spent waiting for ACKs.