strace
クライアント アプリケーションの障害に対して を実行すると、次のような結果になりました。
socket(PF_LOCAL, SOCK_SEQPACKET|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
setsockopt(3, SOL_SOCKET, SO_PASSCRED, [1], 4) = 0
connect(3, {sa_family=AF_LOCAL, sun_path="/path/to/socket"}, 19) = -1 EPROTOTYPE (Protocol wrong type for socket)
close(3) = 0
exit_group(2) = ?
+++ exited with 2 +++
私はその後推測さまざまなパラメータを使用してソケットをエミュレートすることでソケット タイプをテストしましたsocat
が、効果はありませんでした。
この回答のコードも見ましたここしかし、既存のソケットを使用するのではなく、ソケットを作成しているようで、パスからソケットを取得する方法が見つからないようです。
ソース コードを詳しく調べなくても、ソケットのパス (存在する場合) から既存のソケットの詳細 (プロトコル タイプなど) を簡単に確認する方法はありますか?
答え1
以下を使用できますlsof /path/to/socket
:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
hindsight 19619 root 6u unix 0xffff88038612b480 0t0 257123917 /path/to/socket
これを知ることで、PID
プロセス自体についてさらに詳しく知ることができます。
cat /proc/19619/io
rchar: 11635200437
wchar: 2722080850
syscr: 16905056
syscw: 920240
read_bytes: 36397568
write_bytes: 3515994112
cancelled_write_bytes: 760422400
ss
または、すべての Unix ソケットを表示するために使用することもできます。
ss -x
-x
Unixドメインソケットを表示する-e
詳細なソケット情報を表示する-m
ソケットのメモリ使用量を表示する
いくつかのタイプをフィルタリングできます:
ss -x -A unix_stream