Mon objectif est de créer un serveur d'écho simple en utilisant nc
et un seul fifo
. Je ne cherche pas la meilleure façon de le faire, j'essaie simplement de comprendre la sémantique des commandes suivantes (quand se produit fork, pourquoi, qu'est-ce que cela change, pourquoi les commandes se comportent différemment ...).
J'utilise Bash, donc je ne sais pas si toutes les commandes ne fonctionnent pas avec un Posix sh
ou zsh
, ksh
...
Voici les quatre commandes que je mentionne dans le titre (en supposant que je l'ai déjà fait 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
Maintenant, je m'attendrais à ce que les 4 commandes fassent la même chose, au moins les deux dernières fassent la même chose.
- La première commande se comporte comme prévu, un simple serveur d'écho qui s'arrête lorsque le client ferme la connexion.
- Se comporte comme 1.
- Je peux me connecter au serveur, envoyer des données, mais je ne reçois jamais rien en retour. Lorsque je ferme la connexion client, le serveur s'arrête.
- Impossible de se connecter au serveur, le serveur écoute indéfiniment.
nc ... <>fifo
devrait être suffisant. gnu.org/software/bash/manual/html_node/Redirections.htmlnc ... <>fifo >&0
, car<>fifo
ouvrefifo
pour la lecture et l'écriture sur fd 0, et nous voulons que la sortie y aille aussi.