Ping перед установкой соединения с удаленной стороной

Предлагаю, во время опроса, перед попыткой установки соединения с удаленной стороной, проверять на доступность удаленного узла к которому производиться подключение, c помощью класса Ping.
Это позволит:

  • быстрее определять доступность узла (по сравнению с текущим методом, ожидания ответа на соединение по TCP в интервале 21 сек. ), тем самым уменьшиться время обработки очереди опроса (с недоступными узлами),
  • протоколировать в журнал качество связи (потеря пакетов, большая задержка пакетов),
  • определить задержку доставки/получения данных до/от удаленного узла (в зависимости от загруженности сети), тем самым возможно для каждого сеанса опроса, автоматически подбирать оптимальное значение “Задержка ответа” - параметра устройства к которому производится подключение. Тем самым уменьшая время опроса.

Так же, заметил что, к тем узлам, к которым не проходит подключение штатно (т.е. подключение обрывается по таймауту 21 сек.), проверка доступности узла командой Ping из командной строки, решает проблему с подключением, т.е. подключение тут же устанавливается при повторной попытке опроса данного узла. Возможно это связанно с обновлением маршрутов в оборудовании связи на стороне оператора, вызванное отправкой пакетов ICMP (командой Ping)?!

Данное предложение является следствием темы - Не отрабатывается таймаут на подключение

Есть несколько “но” в реализации вашего предложения. Давайте пройдемся по некоторым моментам.

Нужно понимать, что описанная вами ситуация является специфичной и относится к работе (точнее настройкам) каналообразующего оборудования. ICMP-пакеты могут иметь приоритет отличный от TCP-пакетов, поэтому полагаться на них для оценки качества связи уже не приходится (это время прошло). Пакеты ICMP могут блокироваться провайдером. Отправка ICMP-пакета в общем-то никак не должна влиять на последующую установку соединения, только если она не “будит” оборудование на объекте.

Можно было бы приравнять отправку ICMP-пакета PIGN к вызову удаленной стороны, но у нас нет никаких сведений о подобном оборудовании и, в общем-то, там может быть очень много специфики, которую не стоит тащить в систему. Лично мне, вариант а-ля вызов для TCP-соединений не очень нравится, т.к. он, возможно, решит вашу конкретную проблему, но будет бесполезен для большинства пользователей.

Предлагаю немного изменить формулировку вашего предложения на “выполнять скрипт перед установкой соединения”, чтобы сделать его интересным для других пользователей. В скрипте powershell можно описать отправку PING и любые другие команды, например, отправку magic-пакета для пробуждения оборудования. Скрипты можно оформить в виде системного справочника, чтобы в параметрах опроса можно было выбрать уже готовый скрипт.