Penso che invece tu debba configurare il tuo sistema operativo. La modifica dei parametri keepalive da parte dei programmi non è ancora ampiamente supportata. Questo dovrebbe aiutarti:
Utilizzare TCP keepalive per rilevare errori di rete
Anche i tuoi parametri sono scelti male. Se tcp_keepalives_count=1
ha funzionato, quindi anche un pacchetto keepalive perso interromperà la connessione. E i singoli pacchetti si perdono spesso. Userei quanto segue in /etc/sysctl.conf
su MacOSX/FreeBSD:
net.inet.tcp.keepidle =60000
net.inet.tcp.keepintvl =10000
Il sistema operativo interromperà le connessioni per un massimo di 140 secondi (60 secondi di inattività + 8 pacchetti keep-alive a intervalli di 10 secondi) dopo aver perso la connettività.