Re: TCP keepalive support for libpq
Magnus Hagander <magnus@hagander.net>
From: Magnus Hagander <magnus@hagander.net>
To: daveg <daveg@sonic.net>
Cc: Andrew Chernow <ac@esilo.com>, Tollef Fog Heen <tollef.fog.heen@collabora.co.uk>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2010-02-11T09:18:46Z
Lists: pgsql-hackers
2010/2/10 daveg <daveg@sonic.net>: > On Tue, Feb 09, 2010 at 09:34:10AM -0500, Andrew Chernow wrote: >> Tollef Fog Heen wrote: >> >(please Cc me on replies, I am not subscribed) >> > >> >Hi, >> > >> >libpq currently does not use TCP keepalives. This is a problem in our >> >case where we have some clients waiting for notifies and then the >> >connection is dropped on the server side. The client never gets the FIN >> >and thinks the connection is up. The attached patch unconditionally >> >adds keepalives. I chose unconditionally as this is what the server >> >does. We didn't need the ability to tune the timeouts, but that could >> >be added with reasonable ease. >> >> ISTM that the default behavior should be keep alives disabled, as it is >> now, and those wanting it can just set it in their apps: >> >> setsockopt(PQsocket(conn), SOL_SOCKET, SO_KEEPALIVE, ...) > > I disagree. I have clients who have problems with leftover client connections > due to server host failures. They do not write apps in C. For a non-default > change to be effective we would need to have all the client drivers, eg JDBC, > psycopg, DBD-DBI, and the apps like psql make changes to turn it on. Adding > this option as a non-default will not really help. Yes, that's definitely the use-case. PQsocket() will work fine for C apps only. But it should work fine as an option, no? As long as you can specify it on the connection string - I don't think there are any interfaces that won't take a connection string? -- Magnus Hagander Me: http://www.hagander.net/ Work: http://www.redpill-linpro.com/