Como manter o socat vivo usando a opção keepalive

10

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
Marc Salvetti
fonte
Alguns roteadores NAT desligada depois de um tempo específico em vez de atividade
Ferrybig

Respostas:

5

Da página de manual socat para -t<timeout>:

Quando um canal atinge EOF, a parte de gravação do outro canal é desligada.

Tente adicionar a ignoreeofopção.

Louis Waweru
fonte
0

Se você estiver usando um comando LISTEN como OPENSSL-LISTEN, TCP-LISTENetc., a forkopção desativará as conexões com um processo filho para que o socat possa continuar recebendo.

Exemplo:

socat - OPENSSL-LISTEN:443,method=TLS1.2,verify=0,cert=cert.pem,key=key.pem,fork

Obrigado a: /unix//a/283289/15954

jtpereyda
fonte