Comment garder socat en vie en utilisant l'option keepalive

10

J'ai cette commande socat qui fonctionne bien, mais quand aucune donnée n'est transférée, elle meurt après exactement 5 minutes et je ne comprends pas pourquoi, comme je l'ai configurée pour envoyer 100 keepalive toutes les 10 secondes après les 10 premières secondes . D'après ce que j'ai compris de la page de manuel de socat, cela devrait la maintenir en vie pendant des milliers, soit 16 minutes. De plus, si j'essaie de définir keepcnt à 200, j'obtiens "setsockopt (7, 6, 6, {200}, 4): argument non valide", mais nulle part sur Internet ne pourrais-je trouver la valeur maximale de cet argument, donc je pense Je dois manquer quelque chose de très évident ici. Expérimenter davantage avec les arguments n'a jamais changé la valeur de timeout de 5mn. La définition d'une valeur inférieure pour keepcnt et des valeurs supérieures de keepintvl est acceptée mais n'a tout simplement aucun effet 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 Ce produit comprend un logiciel développé par le projet OpenSSL pour une utilisation dans la boîte à outils OpenSSL. (http://www.openssl.org/)
31/05/2017 08:53:01 socat [16065] I Ce produit comprend un logiciel écrit par Tim Hudson ([email protected])
31/05/2017 08:53:01 socat [16065] Je règle l'option "symbolic-link" sur "/ tmp / lp1"
31/05/2017 08:53:01 socat [16065] J'ouvre vide ({5}, {6}, {"/ dev / pts / 1"} ,,) -> 0
31/05/2017 08:53:01 socat [16065] N PTY ​​est / dev / pts / 1
31/05/2017 08:53:01 socat [16065] Je mets l'option "so-keepalive" à 1
31/05/2017 08:53:01 socat [16065] Je mets l'option "tcp-keepidle" à 10
31/05/2017 08:53:01 socat [16065] Je mets l'option "tcp-keepintvl" à 10
31/05/2017 08:53:01 socat [16065] Je mets l'option "tcp-keepcnt" à 100
31/05/2017 08:53:01 socat [16065] Connexion d'ouverture N à AF = 2 192.168.0.5:9100
31/05/2017 08:53:01 socat [16065] Je démarre la boucle de connexion
31/05/2017 08:53:01 socat [16065] Prise I (2, 1, 6) -> 7
31/05/2017 08:53:01 socat [16065] N connecté avec succès depuis l'adresse locale AF = 2 192.168.0.4:56482
31/05/2017 08:53:01 socat [16065] J'ai résolu et ouvert toutes les adresses de chaussettes
31/05/2017 08:53:01 socat [16065] N boucle de transfert de données de départ avec FD [5,5] et [7,7]
31/05/2017 08:58:01 socat [16065] La prise N 2 (fd 7) est à EOF
31/05/2017 08:58:02 socat [16065] Le sondage a expiré (aucune donnée dans les 0.500000 secondes)
31/05/2017 08:58:02 socat [16065] Je ferme (5)
31/05/2017 08:58:02 socat [16065] Je ferme (7, 2)
31/05/2017 08:58:02 socat [16065] N sortant avec le statut 0
Marc Salvetti
la source
Certains routeurs NAT se sont déconnectés après un certain temps au lieu d'une activité
Ferrybig

Réponses:

5

De la page de manuel socat pour -t<timeout>:

Lorsqu'un canal a atteint EOF, la partie d'écriture de l'autre canal est arrêtée.

Essayez d'ajouter l' ignoreeofoption.

Louis Waweru
la source
0

Si vous utilisez une commande comme LISTEN OPENSSL-LISTEN, TCP-LISTENetc., l' forkoption spin off connexions à un processus enfant afin que socat puisse continuer à recevoir.

Exemple:

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

Merci à: /unix//a/283289/15954

jtpereyda
la source