O TCP KeepAlive (opção de soquete SO_KEEPALIVE
) é governado por três opções: tempo após o qual o mecanismo é acionado, intervalo de sondagem e número de sondagens com falha após o qual a conexão é declarada interrompida.
Seus padrões são:
- tcp_keepalive_time = 7200
- tcp_keepalive_intvl = 75
- tcp_keepalive_probes = 9
Enviar testes após 1¼ minutos parece razoável, e declarar falha após 9 testes com falha também, mas qual é a ideia por trás do tempo inicial de 2 horas ?
Mesmo tcp(7) diz
Observe que os mecanismos subjacentes de rastreamento de conexão e os tempos limite do aplicativo podem ser muito mais curtos.
O ponto principal de habilitar o keepalive é evitar que quaisquer elementos de rede com estado descartem as informações de estado, mas esses elementos tendem a descartar as conexões em alguns minutos . Com alguns servidores com taxa limitada, o curl
short --keepalive-time
parece melhorar significativamente a confiabilidade dos downloads.
Então, por que o padrão é tão longo?
O TCP Keep-alive foi definido em uma época em que até mesmo o conceito de firewall, muito menos firewall com estado ou NAT, provavelmente não era difundido. De RFC 1122 (outubro de 1989):
[...]
A ideia principal na época não era sobre informações com estado perdidas:
[...]
Eu dei uma olhada nas RFCs de atualização, mas não consegui mencionar manter vivos.