Setting TCP keepalive for Cyrus daemons
Bron Gondwana
brong at fastmail.fm
Sat Feb 13 16:38:34 EST 2010
On Sat, Feb 13, 2010 at 10:00:52AM -0600, Gary Mills wrote:
> On Sat, Feb 13, 2010 at 09:09:05PM +1100, Bron Gondwana wrote:
> > On Fri, Feb 12, 2010 at 09:45:02AM -0600, Gary Mills wrote:
> > > I'm willing to add a `keepalive' option to Cyrus master along with the
> > > setsockopt() system call to enable that setting. This option could be
> > > added to the cyrus.conf file for any services that could benefit from
> > > it. Would this be a reasonable addition to Cyrus?
> >
> > How does this look?
>
> Wow, you beat me to it! You even covered all of the settings.
:)
> > +{ "tcp_keepalive", 0, SWITCH }
> > +/* Enable keepalive on TCP connections */
> > +
> > +{ "tcp_keepalive_cnt", 0, INT }
> > +/* Number of TCP keepalive probes to send before declaring the
> > + connection dead (0 == system default) */
> > +
> > +{ "tcp_keepalive_idle", 0, INT }
> > +/* Number of seconds a connection must be idle before keepalive
> > + probes are sent (0 == system default) */
> > +
> > +{ "tcp_keepalive_intvl", 0, INT }
> > +/* Number of seconds between keepalive probes (0 == system default) */
> >
> > A switch to enable keepalive, plus options to edit each of the
> > tunables. The full patch is attached - not tested except for
> > a compile yet.
>
> I can't comment on imap/sync_client.c because I don't use that
> technique. In master.c, I would have put my changes into
> spawn_service(), just before master exec'ed the daemon. However,
> putting them where the connection was first accepted should be fine
> too.
I considered that - but I wanted it to be after:
cyrus_init(alt_config, service, 0);
So that you could control options per service.
> One thing to watch is that only SO_KEEPALIVE is standard. The other
> three symbols: TCP_KEEPCNT, TCP_KEEPIDLE, and TCP_KEEPINTVL only exist
> in some operating systems. They have global settings but don't have
> per-socket options. For these, the setsockopt() function calls need
> to be conditional on the symbols.
Hmm - yeah, OK. I'll protect them with #ifdefs.
> For which Cyrus version is your patch intended. I'm still running
> cyrus-imapd-2.3.8 .
It's roughly against 2.3-tail (I have a couple more patches in between
that build debian packages and add a .gitignore file, but otherwise it's
2.3-tail). I'm pretty sure it will backport to 2.3.8 though, that area
of the code hasn't been changed in a while.
Bron.
that far OK.
More information about the Info-cyrus
mailing list