Ich würde socat
stattdessen empfehlen :
echo test | socat -t 10 - tcp:server:7
(hier bis zu 10 Sekunden warten, bis der Server antwortet und herunterfährt)
socat
kann viel, viel mehr als die verschiedenen (unterschiedlichen und inkompatiblen) Implementierungen von nc
/ netcat
und funktioniert im Allgemeinen zuverlässiger. Es ist Ihr ultimatives Schweizer Taschenmesser.
Zitieren der Manpage für die -t
Option:
-t <Zeitüberschreitung>
Wenn ein Kanal EOF erreicht hat, wird der Schreibteil des anderen Kanals heruntergefahren. Dann wartet socat [timeval] Sekunden, bevor es beendet wird. Die Standardeinstellung ist 0,5 Sekunden. Dieses Zeitlimit gilt nur für Adressen, bei denen der Schreib- und Leseteil unabhängig voneinander geschlossen werden kann. Wenn während des Timeout-Intervalls der gelesene Teil EOF ausgibt, wird er socat
beendet, ohne auf das Timeout zu warten.
Nach dem echo
Schreiben test\n
wird es oben beendet, wodurch die Pipe geschlossen wird. socat
sieht EOF auf seinem -
Kanal (stdin), schließt dann die Schreibrichtung des TCP-Sockets und wartet, bis der Remote-Dienst ebenfalls heruntergefahren wird, oder auf 10 Sekunden Inaktivität, je nachdem, was zuerst eintritt. Der echo
Dienst soll die Verbindung beenden, sobald das andere Ende seine Senderichtung beendet hat, sodass der Befehl nicht länger dauern sollte als die Zeit, die zum Herstellen der Verbindung, zum Austausch der Daten und zum Herunterfahren benötigt wird.
Mit OpenBSDs netcat
oder seinem Port zu Linux , die die Rückstellung einer zumindest auf den letzten Versionen von Debian und Derivate ist, wäre eine Annäherung nc -Nw10 server 7
(die in dieser anders nc
ist -w
sowohl eine Verbindungszeit und ein Inaktivitäts - Timeout)
So implementieren Sie einen TCP- echo
Dienst auf Port 7777 zum Testen:
socat tcp-listen:7777,reuseaddr,fork exec:cat,nofork
(der fork
einen Prozess für jede eingehende Verbindung gabeln, nofork
auszuführen cat
direkt in diesem Prozess mit seinem stdin / stdout wobei der TCP - Socket, wie bei der Verwendung (x)inetd
).
Einige Timing auf der Loopback-Schnittstelle, mit zsh
:
$ time echo test | socat -t10 - tcp:localhost:7777
test
echo test 0.00s user 0.00s system 54% cpu 0.001 total
socat -t10 - tcp:localhost:7777 0.00s user 0.01s system 55% cpu 0.009 total