连接到命名的 Unix 域套接字节点

Connecting to Named Unix Domain Socket Node

我正在尝试通过 nodejs 连接到命名的 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 模块似乎不支持连接到临时套接字。

任何人都知道是否有办法做到这一点,或者我是否需要以不同的方式格式化我的套接字名称以便连接或真的有任何帮助吗?

节点不支持 SEQPACKET 套接字。您可以向节点问题跟踪器提交 PR 作为添加支持的功能请求and/or您可能需要编写一个节点插件,让您连接到 SEQPACKET 套接字。