0

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

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

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 写入内核日志,以查看内核模块是否还活着!

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

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

4

1 回答 1

0

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

于 2014-10-07T17:41:57.717 回答