On 17 Dec 2006, at 14:12, Ross Boylan wrote:
Is it enough to set this on the listening IMAP socket, or does it need to be set on the sockets that get opened up as the dialogue progresses? Put differently, can I write a little independent program to set the socket options, or do I need to modify the cyrus sources (or perhaps those of mailutils?)?
You need to insert it into both the client and server, it needs to happen within the program that uses the socket in question. The option is socket specific, it has no effect on the rest of the system. Ideally, you'd do it just after the connect() on the client or accept() on the server. I see that stock Cyrus doesn't have Nagel disabled. I can't think of what use enabling Nagel would have for Cyrus, and disabling Nagel would certainly tend to improve performance.
The problem as I understand it is with very small exchanges. So the client says something like "select this mailbox". Since it doesn't fill a buffer, Nagel says to hang on to it for a fraction of a second. Similarly, the server responds to something like the example "select" with "OKAY", which is also small and so is buffered. Since IMAP is characterized by these many small exchanges, the cumulative delay can be large, and the protocol doesn't operate at anywhere near maximum throughput. When full messages are exchanged, the buffers are filled, so those don't suffer from delays, but keep in mind that IMAP is designed to avoid sending the full message under most circumstances.
:wes ---- Cyrus Home Page: http://cyrusimap.web.cmu.edu/ Cyrus Wiki/FAQ: http://cyrusimap.web.cmu.edu/twiki List Archives/Info: http://asg.web.cmu.edu/cyrus/mailing-list.html