netlink_unicast возвращает errno -111 (соединение отказано) в режиме демона

У меня есть модуль ядра Linux, использующий Netlink для связи с процессом демона, работающим в пространстве пользователя.

На этапе разработки я всегда запускал исполняемый файл демона как обычный процесс (без вызова fork()) и все работало нормально.

На данный момент разработка основного поведения завершена, поэтому я реализую --daemon Аргумент, который называют fork() метод (а также setsid() как описано в ссылке http://www.thegeekstuff.com/2012/02/c-daemon-process/) перед тем, как продолжить нормальный процесс.

Следующим шагом является то, что демон после инициализации сокета Netlink вызывает модуль ядра Linux, а этот сохраняет PID демона для отправки сообщений. Linux Kernel Daemon правильно получает сообщения от процесса демона, но не может отправлять сообщения, используя netlink_unicast() который возвращает errno -111 (соединение отказано).

Я проверил PID, полученный модулем ядра Linux, и это тот же самый демон после того, как он был разветвлен, поэтому выглядит правильно.

Знаете ли вы, почему мой демон-процесс, когда его разветвляют, больше не может получать сообщения (используя recvmsg() метод) из моего модуля ядра Linux?

1 ответ

@artless-noise был прав, я забыл назвать umask(0);

Другие вопросы по тегам