gpt4 book ai didi

c - 与 msghdr 结构中的 msg_name 字段混淆

转载 作者:太空狗 更新时间:2023-10-29 12:11:23 26 4
gpt4 key购买 nike

在用户空间,我使用 sock_raw(包括 IP header )封装了一个 L3 数据包,并使用 sock_sendmsg()msghdr 发送到内核空间>结构

struct msghdr {
void *msg_name; /* optional address */
struct iovec *msg_iov; /* scatter/gather array */
...
};

我无法清楚地理解msg_name 的作用。我已经在 L3 header 中指定了源 IP 和目标 IP。为什么我需要 msg_name

最佳答案

struct msghdrmsg_namemsg_namelen字段与dest_addr的功能相同sendto 的 addrlen 个参数: 它们指定目标地址。它们旨在与正常 未连接的数据报套接字一起使用。例如,当在 AF_INET/SOCK_DGRAM 套接字上使用 sendmsg 发送 UDP 数据包时,您仅在 iovec 中提供有效载荷,而不是 header , 目标地址在 msg_name + msg_namelen 中。

raw(7) ,描述 SOCK_RAW 套接字的联机帮助页表明您允许在使用原始套接字时将 header 放入 iovec(特别注意讨论IP_HDRINCL) 但没有明确说明在这种情况下您应该将 msg_namemsg_namelen 设置为什么。我建议您尝试将它们都设置为 0,看看是否可行。

关于c - 与 msghdr 结构中的 msg_name 字段混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44220221/

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