我有兩個不同語言的程序試圖連接到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
字符串之前有一個@
。我認爲無論是什麼原因導致@
丟失也是導致失敗的原因,因爲套接字連接在一個進程中不起作用只是因爲它是由不同的進程啓動的。
(我明確地不要求一個通用的解決方案,以「連接到一個抽象的插座」,這就是爲什麼我沒有說明的語言。這主要是因爲這是家庭作業,我拒絕創建這可能會誘使情況我直接複製代碼。)
「@」符號無法在鏈接文檔中出現。 –
對不起。我以爲你從之前關於空字節的答案中得到了答案。開頭的空字節是linux-ism。 [https://superuser.com/questions/381262/linux-init-local-socket-with](https://superuser.com/questions/381262/linux-init-local-socket-with)。 對不起,如果我不清楚。 –