我一直在阅读原始的ping程序代码(http://www.ping127001.com/pingpage/ping.text),感兴趣,只是为了看看它是如何完成的。
我得到了大部分内容,但有一个条件我不明白:
if (datalen >= sizeof(struct timeval)) /* can we time 'em? */
timing = 1;
其中datalen
是回波有效载荷的长度。
我在其他C ping实现中看到了类似的谓词。为什么数据长度小于timeval结构的大小会禁止计时?
编辑:不可避免的深夜derp时刻。
答案 0 :(得分:3)
这是因为如果要在其中实际存储时序数据,则需要确保数据包足够大以存储时序数据。换句话说,通过将timeval
结构放入有效负载区域来实现时序。
例如,如果在timeval
结构的大小为20时为ICMP有效负载区域指定了3的长度,则尝试插入它不是一个好主意: - )