Wie man den Socat mit der Keepalive-Option am Leben erhält

10

Ich habe diesen socat-Befehl, der einwandfrei ausgeführt wird, aber wenn keine Daten übertragen werden, stirbt er nach genau 5 Minuten ab und ich verstehe nicht, warum, da ich ihn so eingerichtet habe, dass nach den ersten 10 Sekunden alle 10 Sekunden 100 Keepalive gesendet werden . Nach dem, was ich von der Socat-Manpage verstanden habe, sollte sie 1000 Sekunden lang am Leben bleiben, was 16 Minuten entspricht. Wenn ich versuche, keepcnt auf 200 zu setzen, erhalte ich außerdem "setsockopt (7, 6, 6, {200}, 4): Ungültiges Argument", aber nirgendwo im Internet konnte ich den Maximalwert für dieses Argument finden, denke ich Mir muss hier etwas sehr Offensichtliches fehlen. Wenn Sie mehr mit den Argumenten experimentieren, ändert sich der Timeout-Wert von 5 Minuten nie. Das Festlegen eines niedrigeren Werts für keepcnt und eines höheren Werts für keepintvl wird akzeptiert, hat jedoch einfach keine sichtbaren Auswirkungen.

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 Dieses Produkt enthält Software, die vom OpenSSL-Projekt zur Verwendung im OpenSSL-Toolkit entwickelt wurde. (http://www.openssl.org/)
2017/05/31 08:53:01 socat [16065] I Dieses Produkt enthält Software von Tim Hudson ([email protected])
2017/05/31 08:53:01 socat [16065] Ich setze die Option "symbolic-link" auf "/ tmp / lp1".
2017/05/31 08:53:01 socat [16065] Ich öffne ({5}, {6}, {"/ dev / pts / 1"} ,,) -> 0
2017/05/31 08:53:01 socat [16065] N PTY ​​ist / dev / pts / 1
2017/05/31 08:53:01 socat [16065] Ich setze die Option "so-keepalive" auf 1
2017/05/31 08:53:01 socat [16065] Ich setze die Option "tcp-keepidle" auf 10
2017/05/31 08:53:01 socat [16065] Ich setze die Option "tcp-keepintvl" auf 10
2017/05/31 08:53:01 socat [16065] Ich setze die Option "tcp-keepcnt" auf 100
2017/05/31 08:53:01 socat [16065] N Verbindungsverbindung zu AF = 2 192.168.0.5:9100
2017/05/31 08:53:01 socat [16065] Ich starte die Verbindungsschleife
2017/05/31 08:53:01 socat [16065] I Socket (2, 1, 6) -> 7
2017/05/31 08:53:01 socat [16065] N erfolgreich von der lokalen Adresse AF = 2 192.168.0.4:56482 verbunden
2017/05/31 08:53:01 socat [16065] Ich habe alle Sockenadressen aufgelöst und geöffnet
2017/05/31 08:53:01 socat [16065] N Starten der Datenübertragungsschleife mit FDs [5,5] und [7,7]
2017/05/31 08:58:01 socat [16065] N-Buchse 2 (fd 7) ist bei EOF
2017/05/31 08:58:02 socat [16065] Zeitüberschreitung bei der Umfrage (keine Daten innerhalb von 0,500000 Sekunden)
2017/05/31 08:58:02 socat [16065] Ich schließe (5)
2017/05/31 08:58:02 socat [16065] Ich habe heruntergefahren (7, 2)
2017/05/31 08:58:02 socat [16065] N wird mit dem Status 0 beendet
Marc Salvetti
quelle
Einige NAT-Router wurden nach einer bestimmten Zeit anstelle der Aktivität getrennt
Ferrybig

Antworten:

5

Aus der socat-Manpage für -t<timeout>:

Wenn ein Kanal EOF erreicht hat, wird der Schreibteil des anderen Kanals heruntergefahren.

Versuchen Sie, die ignoreeofOption hinzuzufügen .

Louis
quelle
0

Wenn Sie mit einem Befehl LISTEN wie OPENSSL-LISTEN, TCP-LISTENetc., die forkwird Option Verbindungen zu einem untergeordneten Prozess ausgliedern , so dass socat Empfang fortgesetzt werden kann.

Beispiel:

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

Vielen Dank an: /unix//a/283289/15954

jtpereyda
quelle