Socat

除非通過 UDP 使用 socat 代理,否則將數據發送到 Unix 套接字失敗

  • April 3, 2019

我正在嘗試調試為什麼不通過 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

然後通過netcatUDP 埠發送工作:

echo "Hello" | nc -u localhost 9988

我還能夠讓我的客戶端應用程序將 UDP 寫入代理,並且在寫入 unix 套接字時沒有成功。

我想了解為什麼socat不接收由 寫入它的數據nc,但如果我通過 UDP 代理則可以。

使用 Amazon Linux 4.14.101-75.76.amzn1.x86_64

您已經使用+設置了一個偵聽數據**報套接字,並試圖通過使用.socat``UNIX-RECV:``nc

第二種情況有效,因為在這種情況下,您將失去的-u標誌添加到nc, 以便它和socat正在使用數據報套接字。這與有代理無關。

進一步閱讀

引用自:https://unix.stackexchange.com/questions/510282