2013-04-08 2 views
1

사용자 공간에서 실행되는 데몬 프로세스와 통신하기 위해 Netlink를 사용하는 Linux 커널 모듈이 있습니다.netlink_unicast는 데몬 모드에서 errno -111 (Connection refused)을 반환합니다.

개발 단계에서 필자는 항상 정상 프로세스 (예 : fork())없이 실행 가능한 데몬을 실행하고 모두 제대로 작동했습니다. 주요 행동의 지금은 개발의

으로는 그래서는 fork() 방법 (및 링크 http://www.thegeekstuff.com/2012/02/c-daemon-process/에 설명 된대로도 setsid())를 부르는 --daemon 인수 직전 정상적인 과정을 계속하기를 구현하고 있습니다 완료됩니다.

다음 단계는 Netlink 소켓을 초기화 한 후 데몬이 Linux 커널 모듈을 호출하고이 데몬이 메시지를 푸시하기 위해 데몬의 PID를 저장한다는 것입니다. Linux 커널 데몬은 데몬 프로세스에서 올바르게 메시지를 수신하지만 netlink_unicast()을 사용하여 errno -111 (Connection refused)을 반환하는 메시지를 보낼 수 없습니다.

Linux 커널 모듈이 수신 한 PID를 확인했으며, fork 된 후 데몬과 동일하므로 올바르게 표시됩니다.

내 데몬 프로세스가 fork 될 때 내 Linux 커널 모듈에서 (recvmsg() 메서드 사용) 더 이상 메시지를받을 수 없다는 것을 알고 있습니까?

+0

그들은 왜'umask (0);'을 호출합니까? 나는 그것이 허가 문제라고 생각한다. 이 * geekstuff * 링크 대신 [daemon] (http://man7.org/linux/man-pages/man3/daemon.3.html)을 사용하지 않으시겠습니까? –

+1

그래, 어째서 ... 나는 단지 좋은 것처럼 보이는 링크를 발견했다. 그러나 데몬이이 문제를 해결한다면 그것은 나에게 좋다! 고마워, 내가 해보고 알려 줄게. – ZedTuX

답변

0

@ artless-noise가 맞았습니다. umask (0)을 호출하는 것을 잊었습니다.

관련 문제