C 在内核和用户端保持Netlink套接字打开

C 在内核和用户端保持Netlink套接字打开,c,linux-kernel,kernel-module,netlink,C,Linux Kernel,Kernel Module,Netlink,在我读了一些关于netlink套接字的文章之后,我尝试在这里采用这个答案 我在用户空间程序中添加了一个无休止的循环: while (1) { memset(nlh, 0, NLMSG_SPACE(MAX_PAYLOAD)); iov.iov_base = (void *)nlh; iov.iov_len = NLMSG_SPACE(MAX_PAYLOAD); msg.msg_name = (void *)&dest_addr; msg.msg_namelen = s

在我读了一些关于netlink套接字的文章之后,我尝试在这里采用这个答案

我在用户空间程序中添加了一个无休止的循环:

while (1) {
  memset(nlh, 0, NLMSG_SPACE(MAX_PAYLOAD));

  iov.iov_base = (void *)nlh;
  iov.iov_len = NLMSG_SPACE(MAX_PAYLOAD);
  msg.msg_name = (void *)&dest_addr;
  msg.msg_namelen = sizeof(dest_addr);
  msg.msg_iov = &iov;
  msg.msg_iovlen = 1;

  ret = recvmsg(sock_fd, &msg, 0);
  if (ret == 0) {
    printf("Exit.\n");
    exit(0);
  }
  else if (ret == -1) {
    perror("recvmsg:");
    exit(1);
  }

  printf("%s", NLMSG_DATA(nlh));
}
要获取更多消息,链接应答中的程序在收到一条消息后停止

我还在内核模块中添加了一个计时器,它每60秒向用户空间程序发送一条消息。下一步是:返回一个应答。这是可行的,因为我不仅发送消息,还使用printk写入内核日志,以查看内核模块是否仍然处于活动状态

我的用户空间程序现在正在侦听消息,我希望如此,但是没有收到内核发送的任何定时消息


因此,我的问题是:是否可以保持两边的套接字打开,并让用户空间程序通过内核模块侦听消息?

是的,它可以在两边打开以接收每一边。

我有一些想法,但我还需要看一下您的内核端代码。