【发布时间】:2017-04-10 02:51:24
【问题描述】:
我有两个不同语言的程序试图连接到 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字符串之前有一个@。我认为任何导致@ 丢失的原因也是导致失败的原因,因为套接字连接仅仅因为它是由不同的进程启动而在进程中不起作用是没有意义的。
(我明确地不要求“连接到抽象套接字”的通用解决方案,这就是为什么我没有说明语言的原因。主要是因为这是家庭作业,我拒绝创造可能诱使我复制代码的情况直接。)
【问题讨论】:
标签: sockets unix connect strace unix-socket