Контроль наличия соединения с сервером брокера. - страница 2

 
Vladimir Simakov:

Столкнулся с проблемой.

При физическом обрыве сетевого соединения, функция IsConnected(), работающая в обработчике событий OnTimer(), продолжает возвращать true до тех пор, пока терминалом не будет выполнен неудачный запрос серверу брокера, а этого без действия пользователя не происходит.

Соответственно, не представляется возможным обеспечить надежный контроль сетевого соединения собственными средствами Mql4.

Уважаемые разработчики, просьба поправить это.

Помню, лет 15 назад читал о принципиальной невозможности выявлять наличие соединения по протоколу TCP, если не отправлять лишних, нужных только для проверки пакетов; по протоколу UDP тем более. А сейчас что, появились средства выявить наличие/отсутствие соединения TCP (или UDP) без отправки хотя бы одного пакета?

Судя по тому, что ни один сервер MT не разрешает сетевым картам реагировать на стандартный запрос пинга утилитой ОС, он не должен давать возможности грузить соединение лишними пакетами. Если выставлять-удалять-модифицировать отложенный ордер каждые n секунд, наверное, можно быстро выявить это ограничение. Серверы MT, насколько помню, поддерживают до 10 тыс. активных клиентов. Представьте, каждый из них будет гнать по одному лишнему запросу в секунду, это будет очень похоже на DDOS атаку. Сетевая карта выдержит, а ПО захлебнется.

Думаю, отсутствие тиков по всем или нескольким инструментам ДЦ из окна обзора рынка остается единственным признаком пропажи связи с ДЦ. Если тики пропали только по одному инструменту - этого мало.

Интересно, а в каких случаях "представляется возможным обеспечить надежный контроль сетевого соединения" вообще в нелокальной сети?

 

Речь идет о функции IsConnected() и таймере.

Вы попробовали - у вас не получилось?
Давайте код посмотрим.

Причина обращения: