C 在内核和用户端保持Netlink套接字打开
在我读了一些关于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
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写入内核日志,以查看内核模块是否仍然处于活动状态
我的用户空间程序现在正在侦听消息,我希望如此,但是没有收到内核发送的任何定时消息
因此,我的问题是:是否可以保持两边的套接字打开,并让用户空间程序通过内核模块侦听消息?是的,它可以在两边打开以接收每一边。我有一些想法,但我还需要看一下您的内核端代码。