Самый простой unix неблокирующий "широковещательный" сокет
У меня есть нерегулярно работающая программа, которая выводит строку, мне нужно отправить этот вывод в какой-то сокет, который может быть распределен из контейнера докера и который может прослушиваться несколькими прослушивателями или вообще не прослушиваться.
Я знаю стандартный именованный канал FIFO, но он ожидает подключения одного слушателя и уведомителя до того момента, пока он не будет заблокирован.
Есть ли способ получить сокет этого типа с помощью "стандартных" команд или демонов linux? Я ищу решение с наименьшим количеством зависимостей, легко поддерживается...
РЕДАКТИРОВАТЬ:
Я обнаружил, что socat может работать таким образом, но я не могу поделиться сообщениями для всех клиентов.
shell1$ socat pipe:/tmp/test-in unix-listen:/tmp/test-out,fork
shell2$ socat - UNIX-CONNECT:/tmp/test-out
shell3$ socat - UNIX-CONNECT:/tmp/test-out
shell4$ echo "test" > socat - UNIX-CONNECT:/tmp/test-in
(shell2) test
1 ответ
Нашел решение по аналогичному ответу https://unix.stackexchange.com/questions/195880/socat-duplicate-stdin-to-each-connected-client. Сокат, кажется, не может работать таким образом, но ncat из пакета nmap работает.
Это работает так же для сокета Unix:
% mkfifo /tmp/messages-in
% exec 8<>/tmp/messages-in # hold the fifo open
% ncat -l -U /tmp/messages-out -k --send-only < /tmp/messages-in
% echo "test" > /tmp/messages-in
% # every client connected to /tmp/messages-out will get "test" message