Ich würde socatstattdessen empfehlen :
echo test | socat -t 10 - tcp:server:7
(hier bis zu 10 Sekunden warten, bis der Server antwortet und herunterfährt)
socatkann viel, viel mehr als die verschiedenen (unterschiedlichen und inkompatiblen) Implementierungen von nc/ netcatund funktioniert im Allgemeinen zuverlässiger. Es ist Ihr ultimatives Schweizer Taschenmesser.
Zitieren der Manpage für die -tOption:
-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 socatbeendet, ohne auf das Timeout zu warten.
Nach dem echoSchreiben test\nwird es oben beendet, wodurch die Pipe geschlossen wird. socatsieht 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 echoDienst 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 netcatoder 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 ncist -wsowohl eine Verbindungszeit und ein Inaktivitäts - Timeout)
So implementieren Sie einen TCP- echoDienst auf Port 7777 zum Testen:
socat tcp-listen:7777,reuseaddr,fork exec:cat,nofork
(der forkeinen Prozess für jede eingehende Verbindung gabeln, noforkauszuführen catdirekt 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