web-dev-qa-db-ja.com

UDP経由でsocatでプロキシされない限り、Unixソケットへのデータの送信に失敗する

データがUnixドメインソケットを介して送信されない理由をデバッグしようとしています。

UDSを介して通信する必要があるアプリケーションが2つありますが、そうではありません。

テストするために、私は次のことを行いました。

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ソケットに書き込むときは成功しませんでした。

socatncによって書き込まれたデータを受信しない理由を理解したいのですが、UDPを介してプロキシする場合は受信します。

Amazon Linux4.14.101-75.76.amzn1.x86_64の使用

1
Will

socat + UNIX-RECV:を使用してリスニングdatagramソケットを設定し、streamソケットとnc

2番目のシナリオが機能するのは、その場合、欠落している-uフラグをncに追加し、それとsocatの両方がデータグラムソケットを使用していたためです。プロキシがあることとは何の関係もありませんでした。

参考文献

1
JdeBP