Приложение C ++: возможно ли передать принятое TCP-соединение от одного процесса другому? - PullRequest
6 голосов
/ 15 марта 2011

Итак, мне интересно - возможно ли передать принятое TCP-соединение (в Windows или Unix-подобной ОС) от одного процесса к другому? Здесь смысл в том, чтобы передавать соединение, а не данные, как это делает прокси-приложение.

Ответы [ 2 ]

8 голосов
/ 15 марта 2011

В Unix TCP-соединение представляется как дескриптор файла сокета. Когда вы fork обрабатываете, файловые дескрипторы наследуются дочерним процессом, включая сокеты TCP. (Хотя они могут быть закрыты на exec, если дан флаг FD_CLOEXEC с fcntl.)

Также возможно передавать файловые дескрипторы между несвязанными процессами, используя сокет локального (Unix) домена; см этот вопрос .

Я не уверен насчет Windows.

5 голосов
/ 15 марта 2011

В Windows используйте WSADuplicateSocket, передайте заполненный WSAPROTOCOL_INFO другому процессу, используйте WSPSocket для воссоздания сокета.

В Unix-подобных ОС это возможно с помощью системного вызова sendmsg(). libancillary обобщает это для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...