Mon objectif est de créer un serveur d'écho simple en utilisant ncet 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 shou 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.