2009-03-02 3 views
4

Есть ли способ передать сокет между процессами (не одно и то же адресное пространство) в Windows?
сокет, проходящий между процессами

Я нахожу эту информацию Shared Sockets, поэтому считаю, что это возможно.

"Функция WSADuplicateSocket вводится для обеспечения обмена сокетов между процессами" ...

Дополнительная информация: в исходном коде Apache (httpd-2.2.11-win32-src.zip) есть использование для api WSADuplicateSocket с комментариями.

[EDIT] Недавно я нахожу этот отличный образец по этому вопросу.
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

Вы можете использовать именованный канал для перенаправления ввода-вывода из нескольких клиентских процессов. Не общий сокет, но довольно простой. http://msdn.microsoft.com/en-us/library/aa365590(VS.85).aspx – Chris

ответ

2

Если вы создаете там дочерний процесс некоторые вещи, которые могли бы сделать это для вас. См

http://www.tangentsoft.net/wskfaq/articles/passing-sockets.html (я знаю, что это один работал в древнем прошлом, ни одна идея, если она работает на текущей версии)

http://msdn.microsoft.com/en-us/library/ms682499.aspx

- MarkusQ

2

См раздел Замечания WSADuplicateSocket , Он эффективно говорит, что вы можете использовать свою любимую схему межпроцессного обмена, чтобы отправить структуру WSAPROTOCOL_INFO (это всего лишь данные!) К цели.

Существует много схем IPC. Вероятно, я бы использовал общую память с Boost::interprocess. Но вы можете использовать SendMessage, если цель имеет цикл окна + сообщения. Или API буфера обмена, если на то пошло (хотя и несколько странно). Механизм - это ваш выбор.