Cómo mantener vivo a Socat usando la opción keepalive

10

Tengo este comando socat que funciona bien, pero cuando no se transfieren datos, muere después de exactamente 5 minutos y no entiendo por qué, ya que lo configuré para enviar 100 keepalive cada 10 segundos después de los primeros 10 segundos . Por lo que entendí de la página de manual de socat, eso debería mantenerlo vivo durante 1000, que son 16 minutos. Además, si trato de establecer keepcnt en 200, obtengo "setsockopt (7, 6, 6, {200}, 4): argumento inválido" pero en ninguna parte de Internet podría encontrar cuál es el valor máximo para ese argumento, así que creo Debo estar perdiendo algo muy obvio aquí. Experimentar más con los argumentos nunca cambió el valor de tiempo de espera de 5mn. Se acepta establecer valores más bajos para keepcnt y valores más altos para keepintvl, pero simplemente no tiene ningún efecto visible.

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 producto incluye software desarrollado por OpenSSL Project para su uso en OpenSSL Toolkit. (http://www.openssl.org/)
31/05/2017 08:53:01 socat [16065] I Este producto incluye software escrito por Tim Hudson ([email protected])
31/05/2017 08:53:01 socat [16065] I configurando la opción "enlace simbólico" a "/ 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 ​​es / dev / pts / 1
31/05/2017 08:53:01 socat [16065] Establezco la opción "so-keepalive" en 1
31/05/2017 08:53:01 socat [16065] Establezco la opción "tcp-keepidle" en 10
31/05/2017 08:53:01 socat [16065] Establezco la opción "tcp-keepintvl" en 10
31/05/2017 08:53:01 socat [16065] Establezco la opción "tcp-keepcnt" en 100
31/05/2017 08:53:01 socat [16065] N abriendo conexión a AF = 2 192.168.0.5:9100
31/05/2017 08:53:01 socat [16065] Comienzo el bucle de conexión
31/05/2017 08:53:01 socat [16065] I socket (2, 1, 6) -> 7
31/05/2017 08:53:01 socat [16065] N conectado correctamente desde la dirección local AF = 2 192.168.0.4:56482
31/05/2017 08:53:01 socat [16065] Resolví y abrí todas las direcciones de calcetines
31/05/2017 08:53:01 socat [16065] N bucle de transferencia de datos de inicio con FDs [5,5] y [7,7]
31/05/2017 08:58:01 socat [16065] N socket 2 (fd 7) está en EOF
31/05/2017 08:58:02 socat [16065] Tiempo de espera de la encuesta (sin datos en 0.500000 segundos)
31/05/2017 08:58:02 socat [16065] Cierro (5)
31/05/2017 08:58:02 socat [16065] Apago (7, 2)
31/05/2017 08:58:02 socat [16065] N saliendo con estado 0
Marc Salvetti
fuente
Algunos enrutadores NAT se desconectaron después de un tiempo específico en lugar de actividad
Ferrybig

Respuestas:

5

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

Cuando un canal ha alcanzado EOF, la parte de escritura del otro canal se cierra.

Intenta agregar la ignoreeofopción.

Louis Waweru
fuente
0

Si está utilizando un comando LISTEN como OPENSSL-LISTEN, TCP-LISTENetc., la forkopción desconectará las conexiones a un proceso secundario para que socat pueda continuar recibiendo.

Ejemplo:

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

Gracias a: /unix//a/283289/15954

jtpereyda
fuente