Mi objetivo es crear un servidor de eco simple usando nc
y uno único fifo
. No estoy buscando la mejor manera de hacerlo, simplemente estoy tratando de entender la semántica de los siguientes comandos (cuándo ocurre la bifurcación, por qué, qué cambia, por qué los comandos se comportan de manera diferente ...).
Estoy usando Bash, así que no estoy seguro de si todos los comandos funcionará con un POSIX sh
o zsh
, ksh
, ...
Aquí están los cuatro comandos que menciono en el título (suponiendo que ya lo hice 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
Ahora esperaría que los 4 comandos hagan lo mismo, al menos los dos últimos hagan lo mismo.
- El primer comando se comporta como se esperaba, un servidor de eco simple que se apaga cuando el cliente cierra la conexión.
- Se comporta como 1.
- Puedo conectarme al servidor, enviar datos, pero nunca recibo nada. Cuando cierro la conexión del cliente, el servidor se apaga.
- No se puede conectar al servidor, el servidor escucha para siempre.
nc ... <>fifo
Debería ser suficiente. gnu.org/software/bash/manual/html_node/Redirections.htmlnc ... <>fifo >&0
, ya que se<>fifo
abrefifo
para leer y escribir en fd 0, y queremos que la salida vaya allí también.