繁体   English   中英

设置套接字选项为什么对 ICMP 请求中的套接字 (IP_HDRINCL) 如此重要?

[英]set socket option is why so important for a socket (IP_HDRINCL) In ICMP request?

我是套接字编程的新手

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

int on = 1;

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

但即使我不使用这个语句,程序也能正常运行。 为什么向内核提及这个套接字(包括 IP 结构)如此重要?

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

除非在套接字上启用IP_HDRINCL套接字选项,否则 IPv4 层在发送数据包时会生成 IP 标头。 启用时,数据包必须包含 IP 标头。 用于接收的 IP 标头始终包含在数据包中。

据推测,您的程序正在构建一个 IP 标头。 如果删除此选项,它将使用内核的 IP 标头。 这是否“有效”取决于您的程序做什么。 也许在某些情况下它想要自定义 IP 标头,并且将其删除将不起作用。

如果您发布程序的其余部分或告诉我们一些有关它的信息,我们可能会提供帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM