2012-03-31 7 views
3

Ich möchte ein natives (C++) -Modul für node.js erstellen, die in der Lage ist, Sockets an einen anderen Knotenprozess zu senden, der völlig unabhängig vom aktuellen Prozess ist. Dazu habe ich die Zusatzbibliothek benutzt, die dafür eine wirklich sehr einfache API hat. Das Problem, das ich jetzt lösen muss, ist, wie ich das fd oder das Handle eines Socket-Objekts von node.js bekommen kann.Get fd oder handle von Socket-Objekt

Es gibt eine TCPWrap Klasse in tcp_wrap.cc & tcp_wrap.h, die eine Eigenschaft handle_ genannt hat, das ein uv_tcp_t Objekt aus libuv hält, aber das Eigentum ist privat. Auch kann ich nicht #include, weil es nur ein Modul von node.js ist und nicht direkt in node.js selbst. Ich weiß nicht, ob es eine gute Idee ist, die Quelldateien in mein Modul zu kopieren, nur um die Klasse zu bekommen ...

Haben Sie irgendwelche Ideen, wie ich es tun könnte?

Ich muss nicht auf Winows laufen, zäh.

Danke!

Antwort

1

Ich habe endlich einen Weg gefunden, es zu tun. Sie können den Knotenmodul finden Sie hier: https://github.com/VanCoding/node-ancillary

Ich habe die Header „tcp_wrap.h“ nur genommen, „stream_wrap.h“ und „handle_wrap.h“ und enthalten dann „tcp_wrap.h“.

Ich konnte dann das Objekt die folgende Art und Weise erhalten:

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

Der folgende Code dann Zugriff auf die Beschreibungsdatei gibt

s->GetStream()->fd 
+0

Wünschte, ich diesen Wrapper wusste, bevor ich meine eigene erstellt! ;) –

+0

^^ Ich kenne dieses Gefühl. Bitte beachten Sie, dass die aktuelle Version von node-averciliary nicht mehr auf die Zusatzbibliothek angewiesen ist. Es ist jetzt mit libuv getan. –

Verwandte Themen