从socket对象获取fd或句柄

时间:2012-03-31 10:26:17

标签: c++ node.js libuv

我想为node.js创建一个本机(c ++)模块,它能够将套接字发送到另一个节点进程,这与当前进程完全无关。为此,我尝试使用辅助库,它有一个非常非常简单的API。我现在要解决的问题是如何获取node.js的socket对象的fd或句柄。

tcp_wrap.cc&中有一个TCPWrap类。 tcp_wrap.h,它有一个名为handle_的属性,它从libuv中保存一个uv_tcp_t对象,但该属性是私有的。另外我不能#include,因为它只是node.js的一个模块而不是直接在node.js本身。我不知道将源文件复制到我的模块是不是只是为了得到那个类...

你有什么想法我能做到吗?

我不必在winows上奔跑,艰难。

谢谢!

1 个答案:

答案 0 :(得分:1)

我终于找到了办法。您可以在此处找到节点模块: https://github.com/VanCoding/node-ancillary

我刚接过标题“tcp_wrap.h”,“stream_wrap.h”和“handle_wrap.h”,然后包含“tcp_wrap.h”。

然后我可以通过以下方式获取对象:

TCPWrap* wrap = static_cast<TCPWrap*>(args[0]->ToObject()->GetPointerFromInternalField(0));
StreamWrap* s = (StreamWrap*)wrap;

以下代码可以访问文件描述符

s->GetStream()->fd