передача сокета между процессами

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

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

Представлена ​​функция WSADuplicateSocket, позволяющая совместно использовать сокеты между процессами...

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

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


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


Ответы (2)


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

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

person Jason S    schedule 02.03.2009

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

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

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

-- МаркусКью

person MarkusQ    schedule 02.03.2009