[Dovecot] pop3 TCP_CORK too late error

Ryan Murray rmurray at cyberhqz.com
Mon Oct 11 06:17:49 EEST 2010


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.




More information about the dovecot mailing list