Experiment to test TCP keepalive for pop3d proxies
Gary Mills
mills at cc.umanitoba.ca
Fri Jun 4 12:23:47 EDT 2010
On Tue, Jun 01, 2010 at 04:49:52PM -0400, Wesley Craig wrote:
> On 01 Jun 2010, at 14:05, Gary Mills wrote:
> > # pstack 12708
> > 12708: pop3d -s
> > feb1a5c5 read (0, 817faf0, b)
> > fec2dfaf sock_read () + 3f
> >
> >I don't know why the stack trace is so short with these.
>
> Thinking about this a little more...
>
> sock_read() is probably from openssl's BIO layer, and the stack trace
> is probably truncated because pstack can't follow the backtrace
> through the function pointer that SSL_read() is using to access
> sock_read(). This is an SSL connection, right? Take a look at the
> SSL_read() man page, for an idea of what can go wrong. Having
> written something very much like the prot suite for another project,
> I can say that SSL is really much happier with non-blocking IO, if
> you're hoping for control to return to the call at some point.
Yes, it's an SSL connection. It's possible that only POP3 connections
with SSL had the problem. I do notice some changes between
cyrus-imapd-2.3.8 and cyrus-imapd-2.3.16, in pop3d.c, that may be
relevant:
@@ -517,9 +541,10 @@
proc_register("pop3d", popd_clienthost, NULL, NULL);
/* Set inactivity timer */
- timeout = config_getint(IMAPOPT_POPTIMEOUT);
- if (timeout < 10) timeout = 10;
- prot_settimeout(popd_in, timeout*60);
+ popd_timeout = config_getint(IMAPOPT_POPTIMEOUT);
+ if (popd_timeout < 10) popd_timeout = 10;
+ popd_timeout *= 60;
+ prot_settimeout(popd_in, popd_timeout);
prot_setflushonread(popd_in, popd_out);
if (kflag) kpop();
@@ -1075,6 +1143,7 @@
result=tls_start_servertls(0, /* read */
1, /* write */
+ pop3s ? 180 : popd_timeout,
layerp,
&auth_id,
&tls_conn);
I wonder if an upgrade will solve this problem?
--
-Gary Mills- -Unix Group- -Computer and Network Services-
More information about the Info-cyrus
mailing list