2017-04-10 95 views
0

我有兩個不同語言的程序試圖連接到Linux系統上的本地抽象套接字。其中一個失敗。我很難確定原因。我只是想知道我能在strace輸出方式中找到什麼區別,所以我可以修復它。使用strace調試connect syscall - @「sun_path」是什麼意思?

工作一個具有此strace輸出:

socket(PF_LOCAL, SOCK_SEQPACKET, 0)  = 3 
connect(3, {sa_family=AF_LOCAL, [email protected]"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字符串之前有一個@。我認爲無論是什麼原因導致@丟失也是導致失敗的原因,因爲套接字連接在一個進程中不起作用只是因爲它是由不同的進程啓動的。


(我明確地不要求一個通用的解決方案,以「連接到一個抽象的插座」,這就是爲什麼我沒有說明的語言。這主要是因爲這是家庭作業,我拒絕創建這可能會誘使情況我直接複製代碼。)

回答

0

含義已確定。這意味着字符串前面有一個空字節。或者可能只是一個非打印字符,或者它表示套接字是抽象的。

0

這是一件Linux事情,我想。見http://man7.org/linux/man-pages/man7/unix.7.html。它應該在「抽象套接字」下。

+0

「@」符號無法在鏈接文檔中出現。 –

+0

對不起。我以爲你從之前關於空字節的答案中得到了答案。開頭的空字節是linux-ism。 [https://superuser.com/questions/381262/linux-init-local-socket-with](https://superuser.com/questions/381262/linux-init-local-socket-with)。 對不起,如果我不清楚。 –