Você pode ativar o keepalive apenas para sua conexão telnet aplicando algumas opções no soquete. Em vez de codificar isso e recompilar o programa, você pode simplesmente usar uma biblioteca existente libkeepalive .
Faça o download do arquivo tar de origem, libkeepalive-0.3.tar.gz
, e compile a biblioteca com o comando make
.
tar xvzf libkeepalive-0.3.tar.gz
cd libkeepalive-0.3
make
Você terá um arquivo libkeepalive.so
. Agora você pode executar seu telnet com a biblioteca pré-carregada. Ele fará as alterações apropriadas na função socket()
. Você tem 3 valores que você pode definir no ambiente, como para o keepalive global. Por exemplo,
LD_PRELOAD=$PWD/libkeepalive.so \
KEEPCNT=2 KEEPIDLE=2 KEEPINTVL=4 telnet hostname
Agora, quando o controle remoto parar de responder aos pacotes keepalive, o comando telnet sairá com Connection closed by foreign host.
Veja o arquivo README
nas fontes:
KEEPCNT <=> net.ipv4.tcp_keepalive_probes
KEEPIDLE <=> net.ipv4.tcp_keepalive_time
KEEPINTVL <=> net.ipv4.tcp_keepalive_intvl
Após KEEPIDLE segundos, um pacote keepalive será enviado a cada KEEPINTVL segundos. Após os pacotes KEEPCNT sem resposta, desconecte-se.