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

时间:2016-09-28 19:55:33

标签: javascript node.js unix-socket

我试图通过nodejs连接到一个名为Unix Domain Socket。我已经看到文档似乎支持连接到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会导致完全相同的错误。

我测试了在一个众所周知的位置创建套接字(文件),并连接到is,并且工作正常,但据我所知,节点或至少net模块没有似乎支持连接到短暂的套接字。

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

1 个答案:

答案 0 :(得分:1)

Node不支持SEQPACKET套接字。您可以将PR作为添加支持的功能请求提交给节点问题跟踪器,并且/或者您可能需要编写一个允许您连接到SEQPACKET套接字的节点插件。