【问题标题】:Does Node.js "new Socket" create a Unix file socket?Node.js“新套接字”是否创建了一个 Unix 文件套接字?
【发布时间】:2011-09-24 01:40:24
【问题描述】:

过去几周我一直在使用 node.js,我需要实现 FAST-CGI 协议。 问题是当我创建一个 UNIX 套接字(通过“新套接字”)时,我需要获取文件名或文件描述符。但 socket.fd 为空(默认参数)。

我的问题是:“new Socket”是否会创建操作系统套接字对象文件,如果是,我如何获取 Socket 文件描述符或文件名?

我不确定这是否是我应该创建套接字的方式,但情况如下:
节点:

var net = require(net)
var socket = new net.Socket()
console.log(socket);

{
 bufferSize: 0,
 fd:null,
 type: null,
 allowHalfOpen: false,
 _writeImpl: [Function],
 _readImpl: [Function],
 _shutdownImpl: [Function]
}

【问题讨论】:

  • 是的,没错,socket.fd 是空的,直到你真正执行 socket.connect() ;)
  • Oohhh.... 所以实际的系统套接字是在调用 connect 时创建的。但是当我调用 socket.connect('/tmp/file.sock') 它给了我(错误:ENOENT,没有这样的文件或目录)...我应该先创建文件吗?或者我该怎么办?
  • 是的,你应该这样做。另外,正如我在下面的回答中所指出的,在创建新套接字时可以给出 FD:new net.Socket({fd : '/tmp/file.sock'})
  • 原来,你应该只指定socket现有的文件描述符,它应该是一个数字(fd:NaN)......那么我该如何创建文件呢?我应该使用 fs.open ???
  • 是的,fs.open 就是这样。我将代码附加到下面的答案中。在 Ubuntu 上为我工作(使用节点 0.4.11)

标签: file sockets unix node.js file-descriptor


【解决方案1】:

好吧,当你连接一个套接字时,socket.fd 不为空,至少在我的情况下不是,所以请提供一个例子。

请注意,您还可以指定现有文件描述符at socket creation

编辑:

var net = require('net'),
    fs = require('fs'),
    sock;

// Create socket file
fs.open('/tmp/node.test.sock', 'w+', function(err, fdesc){
    if (err || !fdesc) {
        throw 'Error: ' + (err || 'No fdesc');
    }

    // Create socket
    sock = new net.Socket({ fd : fdesc });
    console.log(sock);
});

【讨论】:

  • 这不再起作用,它显示“不支持的 fd 类型:文件”。 :(
猜你喜欢
  • 1970-01-01
  • 2014-01-23
  • 2017-04-26
  • 1970-01-01
  • 2015-07-20
  • 2017-08-14
  • 2019-01-13
  • 1970-01-01
  • 2014-01-15
相关资源
最近更新 更多