Mein Ziel ist es, einen einfachen Echoserver mit nc
einem einzigen zu erstellen fifo
. Ich suche nicht nach dem besten Weg, ich versuche nur, die Semantik der folgenden Befehle zu verstehen (wann passiert Fork, warum, was ändert sich, warum verhalten sich die Befehle anders ...).
Ich bin mit Bash, so dass ich nicht sicher bin , ob alle Befehle mit einem POSIX arbeiten sh
oder zsh
, ksh
, ...
Hier sind die vier Befehle, die ich im Titel erwähne (vorausgesetzt, ich habe es bereits getan mkfifo fifo
):
cat fifo | nc -l localhost 8888 > fifo
exec 3<> fifo && nc -l localhost 8888 <&3 >&3 && exec 3>&-
nc -l localhost 8888 <(cat fifo) > fifo
nc -l localhost 8888 < fifo > fifo
Jetzt würde ich erwarten, dass die 4 Befehle dasselbe tun, zumindest die beiden letzten, die dasselbe tun.
- Der erste Befehl verhält sich wie erwartet, ein einfacher Echoserver, der heruntergefahren wird, wenn der Client die Verbindung schließt.
- Benimmt sich wie 1.
- Ich kann eine Verbindung zum Server herstellen, Daten senden, aber ich erhalte nie etwas zurück. Wenn ich die Clientverbindung schließe, wird der Server heruntergefahren.
- Es kann keine Verbindung zum Server hergestellt werden. Der Server hört für immer zu.
nc ... <>fifo
sollte ausreichen. gnu.org/software/bash/manual/html_node/Redirections.htmlnc ... <>fifo >&0
, da zum Lesen und Schreiben auf fd 0<>fifo
geöffnetfifo
wird und wir möchten, dass die Ausgabe auch dorthin geht.