2009-03-02 14 views
4

Y at-il un moyen de passer un socket entre les processus (pas même espace d'adressage) dans Windows? Je trouve cette info Shared Sockets, donc crois que c'est possible.
socket passant entre les processus

"La fonction WSADuplicateSocket est introduit pour permettre le partage de la prise dans les processus" ...

Plus d'info: au code source d'Apache (httpd-2.2.11-win32-src.zip) ont utilisation pour l'API WSADuplicateSocket avec commentaires.

[EDIT] Récemment, je trouve cet excellent échantillon sur cette question.
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

Vous pouvez utiliser un canal nommé pour rediriger les entrées/sorties de plusieurs processus clients. Pas une socket partagée mais plutôt simple. http://msdn.microsoft.com/en-us/library/aa365590(VS.85).aspx – Chris

Répondre

2

Voir la section Remarques de WSADuplicateSocket . Il indique effectivement que vous pouvez utiliser votre schéma de communication interprocessus favori pour envoyer la structure WSAPROTOCOL_INFO (ce sont juste des données!) À la cible.

Il existe de nombreux schémas IPC. J'utiliserais probablement la mémoire partagée avec Boost::interprocess. Mais vous pouvez utiliser SendMessage si la cible a une fenêtre + une boucle de message. Ou l'API du Presse-papiers, d'ailleurs (bien que quelque peu bizarre). Le mécanisme est votre choix.