0
我想通過nodejs連接到一個命名的Unix域套接字。我已經看到,這些文檔似乎支持連接到Unix套接字,但是我沒有看到任何通過名稱連接到套接字的示例,也沒有看到在衆所周知的位置訪問套接字文件的示例。連接到命名的Unix域套接字節點
我可以清楚地看到,插座,我需要對正在使用lsof的(和一些grepping)創建連接:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
run 5632 user 3u unix 0xffff8803dd4b6000 0t0 29647 @#user#5632#1 type=SEQPACKET
插座的名稱被傳遞到腳本實際運行我的節點腳本。我曾嘗試以下:
import net = require('net');
var socket;
var element = "#user#5632#1"; //Parsed from args
try {
socket = net.createConnection("@"+element,(error)=>{
if(error){
console.log(error)
}else{
console.log("Connection Established "+element);}
});
socket.on('error', function(err) {
console.log("Error: " + err);
});
} catch (error) {
console.error(error);
}
很顯然,我有這個包裹起來趕在一些地方錯誤(在執行不同點),但問題是,的createConnection拋出:
Error: Error: connect ENOENT @#user#5882#1
使用net.connect
會導致完全相同的錯誤。
我測試了在一個衆所周知的位置創建一個套接字(文件),並連接到,並且工作得很好,但據我確定,節點或至少net
模塊似乎不支持連接到短暫的插座。
有人知道是否有辦法做到這一點,或者如果我需要格式化我的套接字名稱,以真正連接或任何幫助?
我並不完全確定,但我認爲如果您想要連接或創建到抽象名稱空間unix域套接字,您需要在名稱前添加'\ 0'。 [man UNIX(7):](http://man7.org/linux/man-pages/man7/unix.7.html)('abstract:通過事實區分抽象套接字地址(從路徑名套接字) sun_path [0]是一個空字節('\ 0')')因此,如果您使用'\ 0#user#5632#1'或'\ 0 @#user#5632#1',它可能會工作。但我從來沒有嘗試過。 –
@ t.niese這樣做至少可以將錯誤從找不到套接字變爲不能連接到套接字,但是,看起來Node似乎不支持此套接字類型。不管怎麼說,還是要謝謝你! –