我正在尝试调试为什么数据没有通过 Unix 域套接字发送。
我有 2 个应用程序应该通过 UDS 进行通信,但没有。
为了测试我做了以下操作:
使用socat
,我监听这样的套接字:
socat -x -u UNIX-RECV:/tmp/dd.sock STDOUT
并使用 netcat 发送数据,如下所示:
echo "hello" | nc -U -w1 /tmp/dd.sock
什么都没发生。
但是,如果我还设置 socat 作为代理,监听 UDP 端口,并将其写入套接字,如下所示:
socat -s -u UDP-RECV:9988 UNIX-SENDTO:/tmp/dd.sock
然后通过netcat
UDP 端口发送即可:
echo "Hello" | nc -u localhost 9988
我还能够让我的客户端应用程序将 UDP 写入代理,并且在写入 unix 套接字时失败的地方成功。
我想了解为什么socat
没有收到由 写入的数据nc
,但如果我通过 UDP 代理,则会收到数据。
使用亚马逊Linux 4.14.101-75.76.amzn1.x86_64
答案1
您已经设置了监听数据报带有socat
+ 的套接字UNIX-RECV:
并尝试通过溪流插座与nc
.
第二种情况有效,因为在这种情况下,您将缺少的-u
标志添加到nc
,因此它和 都socat
使用数据报套接字。这与有代理无关。