【发布时间】:2014-06-04 01:18:39
【问题描述】:
在 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));
});
});
谢谢
【问题讨论】: