думаю, что сеть можно считать рабочей, если вернулось не меньше 3-х из 4-х пакетов, еще я бы проверил контрольную сумму принятого пакета, без нее как-то не кошерно, еще я не очень понял, recvfrom не блокируется в ожидании ответа? получается, что как минимум первый вызов recvfrom всегда пройдет в холостую, я бы возможно попробовал отдельный сделать поток для посылки пингов и отдельный поток для приема пакетов, возврат из потока я не очень понимаю, как делать, так что сделал бы внешнюю переменную, в которой бы записывалось кол-во принятых пакетов, при этом вызов recvfrom сделал бы блокирующимся, но я не знаю как это делать, по идее он по умолчанию такой, иначе придется делать холостой цикл, который будет отъедать процессорное время. 21.11.14, Alex Naumov<alexander_naumov@opensuse.org> написал(а):
Всем привет.
Начнем потихоньку? Вот [1] пример функции, которая отправляет 4 ICMP запроса (raw-сокет). В качестве аргумента передаем ей строку с IP адресом. Если получено больше одного ответа, то функция возвращает положительный ответ. Предпологается, что функция используется по аналогии с ping(8).
Кто что думает об этом коде? Что можно улучшить?
Мне вот интересно, сколько по-вашему стоит получить ответов, чтобы быть уверенным, что сеть работет без проблем и задержка с ответами не слишком большая?
Кто-нибудь может ясно объяснить, почему для корректной работы он требует права root?
Alex