O PostgreSQL no Windows não oferece suporte a configurações de manutenção de atividade para uma conexão. Ele está usando
setsockopt(s, IPPROTO_TCP, TCP_KEEPIDLE, ...)
que é específico do IMHO Linux. Você pode implementar um patch para o Postgres para que ele use
SIO_KEEPALIVE_VALS
. Algo assim em src/backend/libpq/pqcomm.c
em StreamConnection
função. {
DWORD bytesReturned = 0;
tcp_keepalive vals;
vals.keepalivetime = 60*1000; /* milliseconds */
vals.keepaliveinterval = 60*1000; /* milliseconds */
vals.onoff = 1;
err = WSAIoctl(
port->sock,
SIO_KEEPALIVE_VALS,
(char *)&vals, sizeof(vals), NULL, 0,
&bytesReturned, NULL, NULL);
if (err == -1) {
elog(LOG, "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %m");
}
}
Ou você pode definir as configurações de todo o sistema no registro do Windows
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
usando KeepAliveInterval
e KeepAliveTime
configurações (a contagem é sempre 10 no Windows Vista e posterior).