使用 strace 调试连接系统调用——@"sun_path" 是什么意思?

Debugging connect syscall with strace – what does @"sun_path" mean?

我有两个不同语言的程序试图连接到 Linux 系统上的本地抽象套接字。两者之一失败。我很难确定原因。我只想知道我能在 strace 输出中找到的一个区别意味着什么,所以我可以修复它。

工作的 strace 输出:

socket(PF_LOCAL, SOCK_SEQPACKET, 0)     = 3
connect(3, {sa_family=AF_LOCAL, sun_path=@"qwertystop.bus.8"}, 19) = 0

非工作人员有此 strace 输出:

[pid  6307] socket(PF_LOCAL, SOCK_SEQPACKET, 0) = 13
[pid  6307] connect(13, {sa_family=AF_LOCAL, sun_path="qwertystop.bus.8"}, 19) = -1 ENOENT (No such file or directory)

存在三个区别:非工作的来自具有多个 pid 的程序,connect 调用的 return 值不同,工作的有一个 @sun_path 字符串之前。我认为导致 @ 丢失的原因也是导致失败的原因,因为套接字连接仅仅因为它是由不同的进程启动而在进程中不起作用是没有意义的。


(我明确不要求 "connect to an abstract socket" 的通用解决方案,这就是为什么我不说明语言的原因。主要是因为这是家庭作业,我拒绝创造可能诱使我复制代码的情况直接。)

意义确定。这意味着字符串前面有一个空字节。或者可能只是一个非打印字符,或者它表示套接字是抽象的。

我认为这是 Linux 的事情。参见 http://man7.org/linux/man-pages/man7/unix.7.html。它应该在 "abstract socket".