Il mio obiettivo è quello di creare un semplice server echo utilizzando nc
e un singolo fifo
. Non sto cercando il modo migliore per farlo, sto solo cercando di capire la semantica dei seguenti comandi (quando si verifica il fork, perché, cosa cambia, perché i comandi si comportano diversamente ...).
Sto utilizzando Bash, quindi non sono sicuro se tutti i comandi funzionerà con un POSIX sh
o zsh
, ksh
...
Ecco i quattro comandi che sto citando nel titolo (supponendo che l'ho già fatto 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
Ora mi aspetto che i 4 comandi facciano la stessa cosa, perlomeno gli ultimi due facciano la stessa cosa.
- Il primo comando si comporta come previsto, un semplice server echo che si spegne quando il client chiude la connessione.
- Si comporta come 1.
- Posso connettermi al server, inviare dati, ma non ricevo mai nulla indietro. Quando chiudo la connessione client, il server si spegne.
- Impossibile connettersi al server, il server è in ascolto per sempre.