Unixドメインソケットを任意のランダムな既存のファイルにバインドできますか?いいえの場合、ソケットによって使用されているファイルをどのように認識しますか?
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
_オプションは拡張情報を出力するように指示します。 '以前はファイルを照合していました。
ss
とlsof
はどちらも、現在の ネットワーク名前空間 からのソケットのみを表示します。ただし、異なるネットワーク名前空間からの2つのUNIXソケットを同じファイルにバインドすることはできません。
デバイス番号も一致するかどうかを確認することをお勧めします。ただし、慎重に進める必要があります。 sock_diag(7)
(ss
で使用)は、カーネルで内部的に使用される形式(_MMMm mmmm
_)で返すためです。 )、ただし、バグのあるss
は、_mmmM MMmm
_ユーザーランド形式であるかのように扱います。上記の例のデバイス番号は_0/2072
_ではなく、_8/24
_(_/dev/sdb8
_);-)