Tanto no Linux quanto no Windows, o programa que abre a conexão deve configurar a opção keep alive no soquete para manter os pacotes ativos a serem enviados.
Acabamos de atualizar o código nginx para ativar a manutenção de todos os sockets abertos.
Arquivo para atualizar: src/event/ngx_event_connect.c
Código para ativar o keep alive (testado apenas no Linux):
/* Set the option active */
int tcp_keepalive = 1;
if(setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, (const void *) &tcp_keepalive, sizeof(int)) < 0) {
return NGX_ERROR;
}
Coloque em ngx_event_connect_peer
logo após o soquete ser criado e a conexão ser recuperada ( ngx_get_connection
).
Você precisará também diminuir o tempo de vida útil (das 2 horas padrão) e talvez manter o intervalo de vida. Consulte o link para obter mais detalhes.