最简单的 unix 非阻塞“广播”套接字

最简单的 unix 非阻塞“广播”套接字

我有一个不定期运行的输出字符串的程序,我需要将该输出发送到某种套接字,该套接字可以从docker容器中分发出去,并且可以被多个监听器监听,甚至可以不监听任何监听器。

我知道标准 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。Socat 似乎无法以这种方式工作,但 nmap 包中的 ncat 可以。

对于 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

相关内容