Como manter socat vivo usando a opção keepalive

10

Eu tenho este comando socat que está rodando bem, mas quando nenhum dado é transferido, ele está morrendo depois de exatamente 5 minutos e eu não entendo porque, como configurei para enviar 100 keepalive a cada 10 segundos após o primeiros 10 segundos. Pelo que eu entendi da página man socat, que deve mantê-lo vivo por 1000s, que é de 16 minutos. Além disso, se eu tentar definir keepcnt para 200, recebo "setsockopt (7, 6, 6, {200}, 4): argumento inválido" mas em nenhum lugar na internet eu poderia encontrar qual é o valor máximo para esse argumento, então eu acho Eu devo estar perdendo algo muito óbvio aqui. Experimentar mais com os argumentos nunca alterou o valor de tempo limite de 5 min. Definir valores mais baixos 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
2017/05/31 08:53:01 socat[16065] I This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/)
2017/05/31 08:53:01 socat[16065] I This product includes software written by Tim Hudson ([email protected])
2017/05/31 08:53:01 socat[16065] I setting option "symbolic-link" to "/tmp/lp1"
2017/05/31 08:53:01 socat[16065] I openpty({5}, {6}, {"/dev/pts/1"},,) -> 0
2017/05/31 08:53:01 socat[16065] N PTY is /dev/pts/1
2017/05/31 08:53:01 socat[16065] I setting option "so-keepalive" to 1
2017/05/31 08:53:01 socat[16065] I setting option "tcp-keepidle" to 10
2017/05/31 08:53:01 socat[16065] I setting option "tcp-keepintvl" to 10
2017/05/31 08:53:01 socat[16065] I setting option "tcp-keepcnt" to 100
2017/05/31 08:53:01 socat[16065] N opening connection to AF=2 192.168.0.5:9100
2017/05/31 08:53:01 socat[16065] I starting connect loop
2017/05/31 08:53:01 socat[16065] I socket(2, 1, 6) -> 7
2017/05/31 08:53:01 socat[16065] N successfully connected from local address AF=2 192.168.0.4:56482
2017/05/31 08:53:01 socat[16065] I resolved and opened all sock addresses
2017/05/31 08:53:01 socat[16065] N starting data transfer loop with FDs [5,5] and [7,7]
2017/05/31 08:58:01 socat[16065] N socket 2 (fd 7) is at EOF
2017/05/31 08:58:02 socat[16065] I poll timed out (no data within 0.500000 seconds)
2017/05/31 08:58:02 socat[16065] I close(5)
2017/05/31 08:58:02 socat[16065] I shutdown(7, 2)
2017/05/31 08:58:02 socat[16065] N exiting with status 0
    
por Marc Salvetti 31.05.2017 / 04:11

2 respostas

3

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

When one channel has reached EOF, the write part of the other channel is shut down.

Tente adicionar a opção ignoreeof .

    
por 17.02.2018 / 02:36
0

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

Exemplo:

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

Graças a: link

    
por 08.11.2018 / 19:49