gpt4 book ai didi

c - 在内核和用户端保持 Netlink Socket 打开

转载 作者:行者123 更新时间:2023-11-30 17:28:05 26 4
gpt4 key购买 nike

在阅读了一些有关 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 写入内核日志,以查看内核模块是否仍然存在!

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

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

最佳答案

是的,它可以两侧打开以容纳每一侧。

关于c - 在内核和用户端保持 Netlink Socket 打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26150567/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com