Check out the
SO_KEEPALIVE option for the socket.
I am not sure there is a safe way to do this with the PGconn handle, but
looking at the header there is an internal struct
pg_conn you can look at include/postgresql/internal/libpq-int.h
And the socket file handle is the sock member.
By default, keepalive only kicks in after 2 hours, but you can change it
to some time less than you firewall times out.
Check out the man pages for:
setsockopt(2)
tcp(7)
You might end up with something like this:
PGconn *conn;
int one = 1, idle = 500, intvl = 500, cnt = 3;
conn = PQconnectdb(conninfo);
setsockopt(conn->sock, SOL_SOCKET, SO_KEEPALIVE, &one, sizeof(one));
setsockopt(conn->sock, SOL_TCP, TCP_KEEPIDLE, &idle, sizeof(idle));
setsockopt(conn->sock, SOL_TCP, TCP_KEEPINTVL, &intvl, sizeof(intvl));
setsockopt(conn->sock, SOL_TCP, TCP_KEEPCNT, &cnt, sizeof(cnt));
The code will not be particularly portable. You would be better off
increasing the timeout on the firewall, or ensuring there was some
activity before the timeout.
On Wed, 2004-09-22 at 08:59 -0500, Aryan Ariel Rodriguez Chalas wrote:
> Hi everybody
>
> I really would apreciate if somebody could help me on
> how to make a persistent connection to a Remote
> Database using "C Language". I work in "Linux"
> Operating System and use the header <pgsql/libpq-fe.h>
>
> I have any problems when I make a connection to the
> Local Database, but every time I make a postgres
> connection (via Internet) to a Remote Database, I find
> the problem that the connections falls down every 10
> minutes more or less.
>
> I hope someone to help me to solve this, please.
>
> My best regards.
>
>
> _________________________________________________________
> Do You Yahoo!?
> Información de Estados Unidos y América Latina, en Yahoo! Noticias.
> Visítanos en http://noticias.espanol.yahoo.com
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster
>
--
David Stanaway <david@stanaway.net>