Eu acho que você precisa configurar seu sistema operacional em vez disso. A alteração dos parâmetros de manutenção de atividade por programas ainda não é amplamente suportada. Isso deve ajudá-lo a:
Usar TCP keepalive para detectar erros de rede
Também seus parâmetros são mal escolhidos. Se
tcp_keepalives_count=1
funcionou, então mesmo um pacote keepalive perdido derrubará sua conexão. E pacotes únicos se perdem com frequência. Eu usaria o seguinte em /etc/sysctl.conf
no MacOSX/FreeBSD:net.inet.tcp.keepidle =60000
net.inet.tcp.keepintvl =10000
O SO irá então descartar conexões no máximo 140 segundos (60 segundos de inatividade + 8 pacotes keepalive em intervalos de 10 segundos) após perder a conectividade.