Переход от прослушивания и разветвления к xinetd - PullRequest
1 голос
/ 20 апреля 2011

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

Теперь я пытаюсь заставить это программное обеспечение работать и за xinetd (в зависимости от некоторого параметра времени выполнения). Я попытался напрямую вызвать функцию основного сервера, предоставив дескриптор файла 0 вместо принятого сокета, но этот метод просто не работает. Программа немедленно останавливается с SIG_PIPE.

Есть ли очевидная причина для такого поведения? Моя основная функция выполняет некоторые вызовы сокетов низкого уровня и обработку сигналов. Это должно работать за xinetd?

1 Ответ

1 голос
/ 20 апреля 2011

Не совсем точно, но не все, что вы можете сделать с дескриптором сокета, также работает с обычными файловыми дескрипторами.Для начала, вы не можете написать на стандартный ввод.Также некоторым системным вызовам, вероятно, нужен сокет, например recv().

Редактировать

Другая возможность: ваш сервер закрывает стандартный ввод как часть своего запуска?*

...