我有两个不同语言的程序试图连接到 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
调用的返回值不同,工作的在 @
字符串之前有一个 sun_path
。我认为导致 @
丢失的原因也是导致失败的原因,因为套接字连接在一个进程中不起作用只是因为它是由不同的进程启动的,这是没有意义的。
(我明确不要求“连接到抽象套接字”的通用解决方案,这就是为什么我没有说明语言。主要是因为这是家庭作业,我拒绝创建一种可能会诱使我直接复制代码的情况。 )
含义确定。这意味着字符串前面有一个空字节。或者可能只是一个非打印字符,或者它表示套接字是抽象的。
我认为这是 Linux 的事情。请参阅 http://man7.org/linux/man-pages/man7/unix.7.html。它应该位于“抽象套接字”下。