为什么ICMP ECHO数据长度与原始ping源代码中的timeval大小相比较?

时间:2011-09-22 22:42:55

标签: c unix ping

我一直在阅读原始的ping程序代码(http://www.ping127001.com/pingpage/ping.text),感兴趣,只是为了看看它是如何完成的。

我得到了大部分内容,但有一个条件我不明白:

if (datalen >= sizeof(struct timeval)) /* can we time 'em? */
    timing = 1;

其中datalen是回波有效载荷的长度。

我在其他C ping实现中看到了类似的谓词。为什么数据长度小于timeval结构的大小会禁止计时?

编辑:不可避免的深夜derp时刻。

1 个答案:

答案 0 :(得分:3)

这是因为如果要在其中实际存储时序数据,则需要确保数据包足够大以存储时序数据。换句话说,通过将timeval结构放入有效负载区域来实现时序。

例如,如果在timeval结构的大小为20时为ICMP有效负载区域指定了3的长度,则尝试插入它不是一个好主意: - )