我有两个不同语言的程序试图连接到 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)
有3个区别:nonworking的来自一个有多个pid的程序,connect
调用的返回值不同,working的@
在sun_path
字符串前有一个。我认为导致@
丢失的原因也是导致失败的原因,因为套接字连接仅因为它是由不同的进程启动而在进程中不起作用是没有意义的。
(我明确没有要求“连接到抽象套接字”的通用解决方案,这就是为什么我没有说明语言。主要是因为这是家庭作业,我拒绝创建可能诱使我直接复制代码的情况。)
意义确定。这意味着字符串前面有一个空字节。或者可能只是一个非打印字符,或者它表示套接字是抽象的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句