[英]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.