【问题标题】:Debugging connect syscall with strace – what does @"sun_path" mean?使用 strace 调试 connect syscall – @"sun_path" 是什么意思?
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我认为这是 Linux 的事情。见http://man7.org/linux/man-pages/man7/unix.7.html。它应该在“抽象套接字”下。

      【讨论】:

      猜你喜欢
      • 2013-05-07
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      • 2021-03-29
      • 2017-10-25
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多