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?