Почему длина данных ICMP ECHO сравнивается с размером временного интервала в исходном коде ping? - PullRequest
1 голос
/ 23 сентября 2011

Я читал исходный код программы ping (http://www.ping127001.com/pingpage/ping.text) из интереса, просто чтобы посмотреть, как это было сделано.

Я получаю большую часть, но есть одно условиечто я не понимаю:

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

Где datalen - длина полезной нагрузки эха.

Я видел подобные предикаты в других реализациях C-ping. Почему это так?длина данных, меньшая, чем размер временной структуры, запрещает синхронизацию?

РЕДАКТИРОВАТЬ: Неизбежный момент поздней сумасшедшей ночи.

1 Ответ

3 голосов
/ 23 сентября 2011

Это потому, что вам нужно убедиться, что пакеты достаточно велики для хранения данных синхронизации, если вы действительно хотите хранить в них данные синхронизации.Другими словами, время работает, помещая структуру timeval в область полезной нагрузки.

Если, например, вы указали длину 3 для области полезной нагрузки ICMP, когда размерструктура timeval была 20, было бы неплохо пытаться вставить ее: -)

...