2014-04-19 61 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讓你開始的鏈接。