Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
能否通过node.js中的另一个unix域套接字发送unix域文件描述符?_Node.js_Sockets - Fatal编程技术网

能否通过node.js中的另一个unix域套接字发送unix域文件描述符?

能否通过node.js中的另一个unix域套接字发送unix域文件描述符?,node.js,sockets,Node.js,Sockets,在Node.js中。 是否可以通过已建立的unix域套接字发送unix域套接字文件描述符 我有下面的示例,但我不确定如何以及是否有可能在另一端以可用的形式接收文件描述符 服务器端当前获取文件描述符类型错误 在本例中,我让客户端通过unix套接字连接到服务器端,这很好,然后一旦建立连接,我尝试使用新的unix套接字创建一个新服务器,并将该文件描述符传递给服务器,以便服务器可以使用它 服务器端: var net = require('net'); var socket = '/tmp/testing

在Node.js中。 是否可以通过已建立的unix域套接字发送unix域套接字文件描述符

我有下面的示例,但我不确定如何以及是否有可能在另一端以可用的形式接收文件描述符

服务器端当前获取文件描述符类型错误

在本例中,我让客户端通过unix套接字连接到服务器端,这很好,然后一旦建立连接,我尝试使用新的unix套接字创建一个新服务器,并将该文件描述符传递给服务器,以便服务器可以使用它

服务器端:

var net = require('net');
var socket = '/tmp/testing.node.sock';
var fs = require('fs');

if (fs.existsSync(socket)) {
    fs.unlinkSync(socket);
}


var server = net.createServer(function(c) { 
    console.log('server connected');
    c.on('end', function() {
        console.log('server disconnected');
    });
    c.on('error', function(e) {
        console.log(e);
    });

    c.on('data', function(data) {
        console.log("data received");
        console.log(data.toString());

        // creating new socket with passed fd
        var newsock = new net.Socket({fd:data}); // how do I convert it here to file descriptor - if even possible 
        console.log(newsock);
    });
});



server.listen(socket, function() { 
    console.log('server bound');


});
客户端:

var net = require('net');
var socket = '/host/testing.node.sock';
var fs = require('fs');

client = net.connect({path: socket}, function () {

    // here we create a new server that we want the fd passed to other server
    var newSock = '/tmp/testing.node.sock';
    if (fs.existsSync(newSock)) {
        fs.unlinkSync(newSock);
    }
    // create a new server 
    var server = net.createServer(function (c) { //'connection' listener
        console.log('server connected');
        c.on('end', function () {
            console.log('server disconnected');
        });
        c.on('error', function (e) {
            console.log(e);
        });

        c.on('data', function (data) {
            console.log("data received");
            console.log(data);
        });

    });


    server.listen(newSock, function () { //'listening' listener
        console.log('server bound');

        console.log(server);

        // here we want to pass the new fd 
        client.write(new Buffer(server._handle.fd));
    });


});

感谢回到节点v0.4中,这项功能在两者中都存在,但后来被删除。您必须编写自己的绑定,以允许在现有fd(unix域套接字,其fd应可在节点IIRC中访问)上发送/接收文件描述符。链接以帮助您入门。

如中所述, 节点不再支持此操作,因为在Windows上无法执行此操作。但该软件包提供了一个UNIX套接字API,可以发送文件描述符: