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

标签 c unix ping

出于兴趣,我一直在通读原始的 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/

相关文章:

java - 当我在 Sco OpenServer 版本 5.0.6 上运行 java 应用程序时遇到问题

java - 为什么 isReachable() 方法总是返回 "false"?

c# - C# Ping(或 PingReply)是否采用平均 RTT?

c - 如何替换文件中的一行?

c - 系统调用写入

linux - 实现Java数据分析工具时的Bash错误

bash - 如何逐行评估流

Java InetAddress.isReachable() 超时

c - 使用 FATfs 的 STMF4 和 USB OTG

c - 如何删除此警告 : second parameter of ‘va_start’ not last named argument?