Unixドメインソケットを任意の既存のファイルにバインドできますか?そうでない場合、ソケットが使用するファイルをどのように識別しますか?
答え1
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
ファイルとの一致に使用したinode番号で拡張情報を印刷するオプションです。
どちらも現在のソケットのみを見るss
ことができます。lsof
ネットワークネームスペース;しかし、異なるネットワーク名前空間の2つのUnixソケットは同じファイルにバインドできません。
デバイス番号も一致していることを確認したい場合がありますが、慎重に進む必要があります。sock_diag(7)
(by ss
)はカーネルが内部的に使用する形式で返しますMMMm mmmm
が、()Buggyはss
それをユーザー領域形式として扱いますmmmM MMmm
。上記の例のデバイス番号はありませんが、0/2072
(8/24
)/dev/sdb8
;-)