2012-03-31 140 views
3

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

有一个在tcp_wrap.cc & tcp_wrap.h一个TCPWRAP类,它有一个名为handle_属性,它拥有一个libuv对象uv_tcp_t,但该财产是私人的。我也不能#include,因为它只是node.js的一个模块,并不直接在node.js本身中。我不知道是否将源文件复制到我的模块只是为了获得该类别是一个好主意...

你有任何ides我怎么能做到这一点?

我不必在低音上运行,强悍。

谢谢!

回答

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 
+0

希望我知道关于这个包装我创建了自己之前! ;) – 2012-07-30 19:32:29

+0

^^我知道这种感觉。请注意,当前的节点辅助版本不再依赖于辅助库。现在使用libuv完成。 – 2012-07-30 23:24:30