2009-03-02 3 views
4

Gibt es eine Möglichkeit, einen Socket zwischen Prozessen (nicht gleichen Adressraum) in Windows übergeben?
Socket-Übergabe zwischen Prozessen

Ich finde diese Info Shared Sockets, deshalb glaube, dass es möglich ist.

"Die WSADuplicateSocket Funktion eingeführt wird Socket-Sharing über Prozesse zu ermöglichen" ...

Mehr Info: Code an der Quelle von Apache (httpd-2.2.11-win32-src.zip) haben Verwendung für api WSADuplicateSocket mit Kommentaren.

[EDIT] Kürzlich finde ich dieses tolle Beispiel zu dieser Frage.
How duplication is done in the unmanaged world - Socket Duplication - Part 1
Is it possible to transfer sockets from unmanaged processes? - Socket Duplication - Part 2

+0

Sie können eine Named Pipe verwenden, um E/A von mehreren Clientprozessen umzuleiten. Keine gemeinsame Steckdose, aber ziemlich einfach. http://msdn.microsoft.com/en-us/library/aa365590(VS.85).aspx – Chris

Antwort

2

Siehe Abschnitt Hinweise WSADuplicateSocket . Es besagt effektiv, dass Sie Ihr bevorzugtes Interprozess-Kommunikationsschema verwenden können, um die WSAPROTOCOL_INFO-Struktur (es sind nur Daten!) An das Ziel zu senden.

Es gibt viele IPC-Schemata. Ich würde wahrscheinlich Shared Memory mit Boost::interprocess verwenden. Sie können jedoch SendMessage verwenden, wenn das Ziel eine Fenster + Nachrichtenschleife hat. Oder die Zwischenablage-API, wenn auch etwas seltsam. Der Mechanismus ist deine Wahl.