【发布时间】: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