PostgreSQL trên Windows không hỗ trợ cài đặt lưu giữ cho một kết nối. Nó đang sử dụng setsockopt(s, IPPROTO_TCP, TCP_KEEPIDLE, ...)
IMHO dành riêng cho Linux.
Bạn có thể triển khai bản vá cho Postgres để nó sử dụng SIO_KEEPALIVE_VALS
. Một cái gì đó như thế này trong src/backend/libpq/pqcomm.c
trong StreamConnection
chức năng.
{
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");
}
}
Hoặc bạn có thể đặt cài đặt toàn hệ thống trong sổ đăng ký Windows HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
sử dụng KeepAliveInterval
và KeepAliveTime
cài đặt (số lượng luôn là 10 trên Windows Vista trở lên).