2014-04-19 57 views
0

在Node.js.中 是否有可能通过已建立的unix域套接字发送unix域套接字文件描述符?您可以通过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)); 
    }); 


}); 

感谢

回答

2

回到节点V0.4存在两个sendingreceiving此功能,但它后来被删除。您必须编写自己的绑定,以允许您在现有的fd(您的unix域套接字,其fd应该可以在节点IIRC中访问)上发送/接收文件描述符。 Herearesome让你开始的链接。