В Linux для меня действительно ли возможно открыть сокет и передать сокет другому процессу? Если да, можно сказать мне, где я могу найти пример?
Спасибо.
Да, вы можете, используя sendmsg()
с SCM_RIGHTS от одного процесса к другому:
SCM_RIGHTS
- Посылать или получать набор из открытые дескрипторы файлов из другого процесс. Часть данных содержит целочисленный массив файловых дескрипторов. Переданные дескрипторы файлов ведут себя как хотя они были созданы сdup(2)
.
http://linux.die.net/man/7/unix
Это не типичное использование. Чаще всего это происходит, когда процесс наследует сокеты от своего родителя (после fork()
). Незакрытые файловые хэндлы (включая сокеты) будут доступны дочернему процессу. Таким образом, дочерний процесс наследует родительские сокеты.
Серверный процесс, который прослушивает соединения, называется демоном. Обычно он вилкирует каждое новое соединение, порождая процесс для обработки каждого нового запроса. Пример типичного демона здесь:
http://www.steve.org.uk/Reference/Unix/faq_8.html#SEC88
Прокрутите вниз до void process()
.