прохождение сокетов между процессами - PullRequest
5 голосов
/ 02 марта 2009

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

Я нахожу эту информацию Общие сокеты , поэтому считаю, что это возможно.

" Введена функция WSADuplicateSocket для обеспечения совместного использования сокетов между процессами " ...

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

[EDIT] Недавно я нашел этот замечательный образец по этому вопросу.
Как выполняется дублирование в неуправляемом мире - Сокет дублирования - Часть 1
Можно ли переносить сокеты из неуправляемых процессов? - Дублирование сокета - Часть 2

Ответы [ 2 ]

4 голосов
/ 02 марта 2009

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

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

3 голосов
/ 02 марта 2009

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

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

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

- MarkusQ

...