2015-11-16 2 views
3

Как передать права собственности на сокет между процессами в Linux? У Windows есть функция Socket.DuplicateAndClose, но есть ли способ сделать это в Linux?Передача сокета между процессами в Linux

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

ответ

3

Детский процесс наследует дескриптор файла. Таким образом, вам нечего делать, кроме закрытия сокета в родителе после того, как вы раздвоили ребенка.

Если у вас есть exec другой исполняемый файл в дочернем модуле, вы можете сообщить ему значение дескриптора файла с помощью определенного аргумента.

2

Учитывая, что вы хотите создать ребенка после создания сокета, передача отсутствует. Дочерние процессы наследуют родительские дескрипторы. Таким образом, родитель просто должен закрыть сокет, чтобы передать права собственности ребенку.

Однако на самом деле передать вновь созданный сокет к существующему процессу, вам нужно использовать вспомогательных данные интерфейса для упаковки гнезда, и sendmsg и recvmsg сделать передачу данных. На странице руководства cmsg приведен пример создания сообщения для передачи.

Смежные вопросы