gpt4 book ai didi

sockets - Netlink套接字中的msg的len错误

转载 作者:行者123 更新时间:2023-12-03 11:54:14 25 4
gpt4 key购买 nike

我试图使用netlink套接字将二进制数据从内核空间发送到用户空间。我遵循了How to use netlink socket to communicate with a kernel module?的示例

但是,在用户空间的接收端,我收到的数据长度大于从内核空间发送的数据长度。但是数据是相同的。数据附加了一些垃圾值。

netlink套接字中不能保证接收到的数据长度与内核空间发送的数据长度相同吗?

最佳答案

您可能需要检查文档,以确保正确使用了诸如“NLMSG_SPACE”,“NLMSG_PAYLOAD”和“NLMSG_DATA”之类的宏。

多余的数据可能来自数据帧的未使用部分,并且您的程序无法正确读取消息长度。 (实际上,没有正确使用宏。)例如,如果您发送1个字节,我相信实际上将发送4个字节,因为 NLMSG_SPACE将舍入为4的倍数以“对齐”数据包中的数据。

但是,读取它应该没问题,只需使用宏来获取数据的实际长度,然后读取那么多数据即可。

这是获取指向缓​​冲区及其长度的指针的示例。

// Get a pointer to the start of the data in the buffer and the buffer (payload) length
buf = (u_char *) (NLMSG_DATA(nlh));
len = NLMSG_PAYLOAD(nlh, 0);

Here are the definitions of the macros.如果需要,请看看这些。 This here is probably more understandable.

您链接到的代码正在发送字符,并通过“内存集”将数据设置为0来摆脱字符,因此打印该char数组就可以了。

希望这可以帮助。如果无法正常工作,请发布一些代码。

关于sockets - Netlink套接字中的msg的len错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23170571/

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