Fwd: [Network] Простой ICMP запрос
22.11.14, Alex Naumov<alexander_naumov@opensuse.org> написал(а):
2014-11-21 22:16 GMT+01:00 Ivan Riabtsov <ivriabtsov@gmail.com>:
думаю, что сеть можно считать рабочей, если вернулось не меньше 3-х из 4-х пакетов,
Да, 75% конечно надежней, чем 50%, но если мы получили хотя бы... даже один ответ, значит хост работает и отвечат. По количеству отстальных ответов можно судить о качестве соединения.
ну в общем в обычном unix так пинг и работает, он посылает 1 пакет и по 1-му ответу судит, жив хост или нет
еще я бы проверил контрольную сумму принятого пакета, без нее как-то не кошерно
Да, она добавляется, но не проверяется при получении. Значит ли это, что, если я ping'ую два хоста, то ответы могут просто перемешаться?
по идее при посылке пинга надо генерировать id пакета и номер последовательнности, можно хранить у себя соответствие id пакета и ip адреса, соответственно после получения пакета проверять, совпадает ли id пакета и ip адрес, с которого был получен ответ, для этого надо распарсить ip header полученного пакета
еще я не очень понял, recvfrom не блокируется в ожидании ответа?
Я просто добавил пока секундную задержку :) Кстати, не подвесит ли блокировка процесс, при отсутствии ответов?
можно сделать вызов блокирующим, но запускать как отдельный поток, тогда, если вызывающая процедура "заснет" например на 4 секунды, то по прошествии этих 4-х секунд она может принудительно ззавершить поток.
получается, что как минимум первый вызов recvfrom всегда пройдет в холостую,
Да, сам не знаю как так получилось - конечно же recvfrom() и sendto() надо поменять местами.
угу :)
я бы возможно попробовал отдельный сделать поток для посылки пингов и отдельный поток для приема пакетов, возврат из потока я не очень понимаю, как делать, так что сделал бы внешнюю переменную, в которой бы записывалось кол-во принятых пакетов, при этом вызов recvfrom сделал бы блокирующимся, но я не знаю как это делать, по идее он по умолчанию такой, иначе придется делать холостой цикл, который будет отъедать процессорное время.
Будет интересно посмотреть на код, но на сколько оправданно распараллеливание потока (т.е. усложнение кода) в данном случае?
в принципе не опревдано, но ради нтереса можно запилить :)
participants (1)
-
Ivan Riabtsov