I socat 1.7.3.1-r0
und läuft auf einem alpine 3.3
Server Linux folgenden Befehl verwenden:Socat nicht schließen TCP-Verbindung
socat -d -d -d PTY,link=/dev/ttyFOOBAR,echo=0,raw,unlink-close=0 TCP-LISTEN:7000,forever,reuseaddr
Socat
für Kunden hören und eine bidirektionale Kommunikation erstellen, indem Daten aus der virtuellen seriellen Schnittstelle /dev/ttyFOOBAR
an den Client vorbei und zurück über TCP. Sobald der Client die Verbindung trennt, sollte socat
beendet werden.
Wenn eine solche Verbindung socat hergestellt wird protokolliert das folgende:
I socat by Gerhard Rieger - see www.dest-unreach.org I This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/) I This product includes software written by Tim Hudson ([email protected]) I setting option "symbolic-link" to "/dev/ttyFOOBAR" I setting option "echo" to 0 I setting option "raw" I setting option "unlink-close" to 0 I openpty({5}, {6}, {"/dev/pts/3"},,) -> 0 N PTY is /dev/pts/3 I setting option "forever" to 1 I setting option "so-reuseaddr" to 1 I socket(2, 1, 6) -> 7 I starting accept loop N listening on AF=2 0.0.0.0:7000 I accept(7, {2, AF=2 CLIENT_IP:PORT}, 16) -> 8 N accepting connection from AF=2 CLIENT_IP:PORT on AF=2 172.20.0.2:7000 I permitting connection from AF=2 CLIENT_IP:PORT I close(7) I resolved and opened all sock addresses N starting data transfer loop with FDs [5,5] and [8,8]
ss
Befehl auf dem Server druckt:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 172.20.0.2:7000 CLIENT_IP:PORT
Das Problem ist, dass, wenn ich den Client trennen (indem es ausgeschaltet wird), ist die TCP-Verbindung immer noch hergestellt und es kommt keine zusätzliche Protokollierung von Socat hinzu. ss
zeigt immer noch die Verbindung als ESTAB an. Irgendwelche Ideen warum? Wenn ich eine Verbindung wieder den Client folgend erscheint in den Protokollen:
W read(8, 0x7fa8f48c4020, 8192): Connection reset by peer
N socket 2 to socket 1 is in error
N socket 2 (fd 8) is at EOF
I poll timed out (no data within 0.500000 seconds)
I close(5)
I shutdown(8, 2)
I shutdown(8, 2): Socket not connected
N exiting with status 0
Aber warum diese statt disconnect on connect passiert?
' socat verwendet Port 5000. 'ss' meldet etwas anderes auf Port 7000. – EJP
@EJP nur ein Tippfehler. Behebt das –
Sie meinen, dieser Ausgang wird nicht aus der Quelle geschnitten und eingefügt? Erzeugt kein Vertrauen. – EJP