Могу ли я открыть сокет и передать его другому процессу в Linux?

В Linux, возможно ли мне открыть сокет и передать сокет другому процессу? Если да, можете ли вы рассказать мне, где я могу найти пример?

Спасибо.

Ответы

Ответ 1

Да, вы можете, используя sendmsg() с SCM_RIGHTS из одного процесса в другой:

SCM_RIGHTS - Отправить или получить набор открыть дескрипторы файлов из другого обработать. Часть данных содержит целочисленный массив файловых дескрипторов. Пропущенные файловые дескрипторы ведут себя как хотя они были созданы с dup(2).

http://linux.die.net/man/7/unix

Это не типичное использование. Чаще всего, когда процесс наследует сокеты от своего родителя (после a fork()). Любые обработчики файлов (включая сокеты), не закрытые, будут доступны дочернему процессу. Таким образом, дочерний процесс наследует родительские сокеты.

Серверный процесс, который прослушивает подключения, называется демоном. Обычно это связано с каждым новым соединением, создавая процесс обработки каждого нового запроса. Пример типичного демона:

http://www.steve.org.uk/Reference/Unix/faq_8.html#SEC88

Прокрутите вниз до void process().