2011-09-22 16 views
1

私は元のpingプログラムコード(http://www.ping127001.com/pingpage/ping.text)を読んで、どうしたのか分かりました。ICMP ECHOのデータ長が元のpingソースコードのtimevalのサイズと比較されるのはなぜですか?

は、私はそれのほとんどを得るが、私は理解していないことを1つの条件があります:datalenはエコーペイロードの長さである

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

他のC ping実装でも同様の述語が見られました。 timeval構造体のサイズよりも小さいデータ長がタイミングを禁止するのはなぜですか?

編集:必然的な深夜遅れの瞬間。

答えて

3

あなたは、あなたが実際にそれらのタイミングデータを保存したい場合は、パケットはタイミングデータを格納するのに十分な大きされていることを確認する必要があるためです。換言すれば、タイミングは、timeval構造体をペイロード領域に配置することによって機能する。たとえば、あなたがtimeval構造体のサイズが20だったICMPのペイロード領域のための3の長さを指定し、場合

は、それは私が見

+0

:-)それを挿入しようとして良いアイデアではないでしょう、私はそれを逃した必要があります、ありがとうございます。何らかの理由でタイミング・パートがICMPの一部であると思っていたのですが、それがすでにあったとしても、pingプログラム自体は冗長になります:) –

関連する問題