Eu tenho esse comando socat que está funcionando bem, mas quando nenhum dado é transferido, ele morre após exatamente 5 minutos e eu não entendo o motivo, pois eu o configurei para enviar 100 keepalive a cada 10 segundos após os primeiros 10 segundos . Pelo que entendi da página de manual do socat, isso deve mantê-lo vivo por mil, o que significa 16 minutos. Além disso, se eu tentar definir keepcnt como 200, recebo "setsockopt (7, 6, 6, {200}, 4): argumento inválido", mas em nenhum lugar da internet eu poderia encontrar qual é o valor máximo desse argumento, então acho que Eu devo estar perdendo algo muito óbvio aqui. Experimentar mais com os argumentos nunca mudou o valor do tempo limite de 5mn. Definir um valor mais baixo para keepcnt e valores mais altos de keepintvl é aceito, mas simplesmente não tem efeito visível.
socat -d -d -d -v pty,link=/tmp/lp1 tcp:192.168.0.5:9100,reuseaddr,keepalive,keepidle=10,keepintvl=10,keepcnt=100
31/05/2017 08:53:01 socat [16065] I Este produto inclui software desenvolvido pelo OpenSSL Project para uso no OpenSSL Toolkit. (http://www.openssl.org/) 31/05/2017 08:53:01 socat [16065] I Este produto inclui software escrito por Tim Hudson ([email protected]) 31/05/2017 08:53:01 socat [16065] I definindo a opção "link simbólico" para "/ tmp / lp1" 31/05/2017 08:53:01 socat [16065] I openpty ({5}, {6}, {"/ dev / pts / 1"} ,,) -> 0 31/05/2017 08:53:01 socat [16065] N PTY é / dev / pts / 1 31/05/2017 08:53:01 socat [16065] Eu definindo a opção "so-keepalive" para 1 31/05/2017 08:53:01 socat [16065] Eu definindo a opção "tcp-keepidle" para 10 31/05/2017 08:53:01 socat [16065] Eu definindo a opção "tcp-keepintvl" para 10 31/05/2017 08:53:01 socat [16065] Eu definindo a opção "tcp-keepcnt" para 100 31/05/2017 08:53:01 socat [16065] N que abre a conexão com AF = 2 192.168.0.5:9100 31/05/2017 08:53:01 socat [16065] Eu começando o loop de conexão 31/05/2017 08:53:01 socat [16065] Soquete (2, 1, 6) -> 7 2017/05/31 08:53:01 socat [16065] N conectado com sucesso a partir do endereço local AF = 2 192.168.0.4:56482 31/05/2017 08:53:01 socat [16065] Resolvi e abri todos os endereços de meias 31/05/2017 08:53:01 socat [16065] N iniciando loop de transferência de dados com DFs [5,5] e [7,7] 31/05/2017 08:58:01 socat [16065] soquete 2 (fd 7) está no EOF 31/05/2017 08:58:02 socat [16065] Votação expirada (nenhum dado dentro de 0.500000 segundos) 31/05/2017 08:58:02 socat [16065] encerro (5) 31/05/2017 08:58:02 socat [16065] Desliguei (7, 2) 31/05/2017 08:58:02 socat [16065] N saindo com status 0
fonte
Respostas:
Da página de manual socat para
-t<timeout>
:Tente adicionar a
ignoreeof
opção.fonte
Se você estiver usando um comando LISTEN como
OPENSSL-LISTEN
,TCP-LISTEN
etc., afork
opção desativará as conexões com um processo filho para que o socat possa continuar recebendo.Exemplo:
Obrigado a: /unix//a/283289/15954
fonte