【问题标题】:Get fd or handle from socket object从套接字对象获取 fd 或句柄
【发布时间】:2012-03-31 10:26:17
【问题描述】:

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

tcp_wrap.cctcp_wrap.h 中有一个 TCPWrap 类,它有一个名为 handle_ 的属性,它包含一个来自 libuv 的 uv_tcp_t 对象,但该属性是私有的。我也不能 #include 因为它只是 node.js 的一个模块,而不是直接在 node.js 本身中。我不知道将源文件复制到我的模块中是否是一个好主意只是为了获取那个类...

你知道我该怎么做吗?

我不必在 windows 上运行,强悍。

谢谢!

【问题讨论】:

    标签: c++ node.js libuv


    【解决方案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
    

    【讨论】:

    • 希望我在创建自己的包装器之前就知道这个包装器! ;)
    • ^^ 我知道这种感觉。请注意,当前版本的 node-ancillary 不再依赖辅助库。现在使用 libuv 完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 2014-12-08
    相关资源
    最近更新 更多