出于兴趣,我一直在通读原始的 ping 程序代码 ( http://www.ping127001.com/pingpage/ping.text ),只是想看看它是如何完成的。
我明白了大部分,但有一个条件我不明白:
if (datalen >= sizeof(struct timeval)) /* can we time 'em? */
timing = 1;
其中 datalen
是 echo payload 的长度。
我在其他 C ping 实现中看到过类似的谓词。为什么数据长度小于 timeval struct 的大小会禁止计时?
编辑:不可避免的深夜傻瓜时刻。
最佳答案
那是因为如果你想在其中实际存储计时数据,你需要确保数据包足够大以存储计时数据。换句话说,计时通过将 timeval
结构放入有效负载区域来工作。
例如,如果当 timeval
结构的大小为 20 时,您为 ICMP 负载区域指定长度为 3,则尝试插入它不是一个好主意:- )
关于c - 为什么 ICMP ECHO 数据长度与原始 ping 源代码中的 timeval 大小相比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7522314/