web-dev-qa-db-ja.com

AF_UNIXを既存のファイルにバインドしますか?

Unixドメインソケットを任意のランダムな既存のファイルにバインドできますか?いいえの場合、ソケットによって使用されているファイルをどのように認識しますか?

1
mistergreen

Unixドメインソケットを任意のランダムな既存のファイルにバインドできますか

いいえ。ファイルは存在しないはずです。存在しないと、bind(2)EADDRINUSEで失敗します。 bind(2)は、_.Sun_path_で指定されたパスで新しいファイルを作成します。

いいえの場合、ソケットによって使用されているファイルをどのように認識しますか?

lsofが役立つ場合があります。 ポイント まで。

またはss

_$ nc -Ul foo &
[3] 9268
$ ls -i ./foo
1179674 ./foo
$ ss -elx | grep -w 1179674
u_str LISTEN  0  5 foo 618789 * 0 <-> ino:1179674 dev:0/2072 peers:
_

(上記のss出力は手動で空白を削除しました)

_-l_オプションは、ssにリスニングソケットのみを選択するように指示し、_-x_オプションはUnixソケットのみを選択し、_-e_オプションは拡張情報を出力するように指示します。 '以前はファイルを照合していました。

sslsofはどちらも、現在の ネットワーク名前空間 からのソケットのみを表示します。ただし、異なるネットワーク名前空間からの2つのUNIXソケットを同じファイルにバインドすることはできません。

デバイス番号も一致するかどうかを確認することをお勧めします。ただし、慎重に進める必要があります。 sock_diag(7)ssで使用)は、カーネルで内部的に使用される形式(_MMMm mmmm_)で返すためです。 )、ただし、バグのあるssは、_mmmM MMmm_ユーザーランド形式であるかのように扱います。上記の例のデバイス番号は_0/2072_ではなく、_8/24_(_/dev/sdb8_);-)

2
mosvy