Executei uma strace
falha no aplicativo cliente e obtive algo assim:
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 +++
Eu então tenteiadivinharo tipo de soquete emulando o soquete com vários parâmetros socat
, mas sem sucesso.
Eu também olhei o código desta respostaaqui, mas parece estar criando um soquete, não usando um existente, e não consigo descobrir como obter um soquete de um caminho.
Sem pesquisar o código-fonte, existe uma maneira fácil de determinar os detalhes (como o tipo de protocolo) de um soquete existente a partir do caminho do soquete (se existir)?
Responder1
Você pode usar 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
Conhecendo o PID
você poderá saber mais sobre o processo em si:
cat /proc/19619/io
rchar: 11635200437
wchar: 2722080850
syscr: 16905056
syscw: 920240
read_bytes: 36397568
write_bytes: 3515994112
cancelled_write_bytes: 760422400
Ou você pode usar ss
para exibir todos os soquetes Unix.
ss -x
-x
Exibir soquetes de domínio Unix-e
Mostrar informações detalhadas do soquete-m
Mostrar uso de memória do soquete
e você pode filtrar por algum tipo:
ss -x -A unix_stream