Моя цель - создать простой эхо-сервер с использованием nc
одного fifo
. Я не ищу лучший способ сделать это, я просто пытаюсь понять семантику следующих команд (когда происходит форк, почему, что это меняет, почему команды ведут себя по-разному ...).
Я использую Bash, так что я не уверен , что все команды будут работать с POSIX sh
или zsh
, ksh
...
Вот четыре команды, которые я упоминаю в названии (при условии, что я уже сделал 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
Теперь я ожидаю, что 4 команды будут делать то же самое, по крайней мере две последние будут делать то же самое.
- Первая команда работает, как и ожидалось, простой эхо-сервер, который отключается, когда клиент закрывает соединение.
- Ведет себя как 1.
- Я могу подключиться к серверу, отправить данные, но я ничего не получаю обратно. Когда я закрываю клиентское соединение, сервер выключается.
- Не удается подключиться к серверу, сервер слушает вечно.
nc ... <>fifo
должно быть достаточно. gnu.org/software/bash/manual/html_node/Redirections.htmlnc ... <>fifo >&0
, так как она<>fifo
открытаfifo
для чтения и записи на fd 0, и мы хотим, чтобы вывод тоже шел туда.