Получить FD или дескриптор из объекта сокета - PullRequest
3 голосов
/ 31 марта 2012

Я хочу создать собственный (c ++) модуль для node.js, который может отправлять сокеты другому процессу узла, который совершенно не связан с текущим процессом.Для этого я пытался использовать вспомогательную библиотеку, которая имеет очень простой API для этого.Проблема, которую я должен решить сейчас, состоит в том, как я могу получить fd или дескриптор объекта сокета node.js.

В tcp_wrap.cc & tcp_wrap.h есть класс TCPWrap, у которого есть свойство, называемоеhandle_, который содержит uv_tcp_t объект из libuv, но это свойство является частным.Также я не могу включить #include, потому что это просто модуль node.js, а не непосредственно сам node.js.Я не знаю, будет ли хорошей идеей скопировать исходные файлы в мой модуль, просто чтобы получить этот класс ...

Есть ли у вас какие-либо идеи, как я могу это сделать?

Iне надо бегать на вдовах, жестко.

Спасибо!

1 Ответ

1 голос
/ 03 апреля 2012

Я наконец нашел способ сделать это.Вы можете найти модуль узла здесь: 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
...