运维开发网

set socket选项为什么对套接字如此重要(IP_HDRINCL)在ICMP请求中?

运维开发网 https://www.qedev.com 2020-06-11 13:24 出处:网络 作者:运维开发网整理
我是socket编程的新手 我看到了一个ICMP请求程序,因为他们将setsockopt用于套接字 int on = 1; setsockopt(s, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on)) 但即使我不使用此语句,程序也能正常运行.为什么会如此 重要的是要提到内核这个套接字包括IP结构? IP_HDRINCL选项执行以下操作(从手册页): The IPv4
我是socket编程的新手

我看到了一个ICMP请求程序,因为他们将setsockopt用于套接字

int on = 1;

setsockopt(s, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on))

但即使我不使用此语句,程序也能正常运行.为什么会如此

重要的是要提到内核这个套接字包括IP结构?

IP_HDRINCL选项执行以下操作(从手册页):

The IPv4 layer generates an IP header when sending a packet unless the IP_HDRINCL socket option is enabled on the socket. When it is enabled, the packet must contain an IP header. For receiving the IP header is always included in the packet.

大概你的程序正在构建一个IP头.如果删除此选项,它将使用内核的IP标头.这是否“有效”取决于您的计划的作用.也许在某些情况下,它想要自定义IP标头,并删除它将无法正常工作.

如果您发布该计划的其余部分或告诉我们一些相关信息,我们可能会提供帮助.

0

精彩评论

暂无评论...
验证码 换一张
取 消