Ошибки, баги, вопросы - страница 2378

 
Renat Fatkhullin:

1. Таков интерфейс.

TLS функции являются вспомогательными для поддержки сложных случаев. Никаких проблем с выставлением SocketTimeouts - именно их лучше и использовать.


2. Она выполняет свою функцию правильно.

Видимо, вы не в курсе проблем детекции разрыва TCP соединений. Это достаточно сложно(ресурсоемко за счет дополнительных вызовов) обнаружить, что соединение гарантированно оборвано правильно. Все сетевые реализации страдают от этой проблемы.

Наша реализация SocketIsReadible достаточно умна и имеет детект разрыва связи. При обнаружении чистого 0 байт, она делает дополнительную работу по проверке завершенности сокета:

Так как она возвращает количество байт без флага завершенности, то она выдает 1 байт, чтобы последующая/неминуемая попытка SocketRead чтения штатно выдала ошибку.

Почему это правильно? Потому что большинство кода программистами в лоб пишется так:

фактически результат операции проверяется на прямой попытке чтении.


3. Нужно перед фактическим чтением делать SocketIsReadible(), если вы не знаете точного размера читаемых данных.

Связка SocketisReadible/SocketRead дает вам возможность не терять контроль(минимизировать почти до нуля утерю контроля) над потоком выполнения своей программы. Это позволяет избегать влетания в сетевые таймауты.

Да, на несколько строк больше кода, но вы ни на миллисекунду(грубо) не потеряете контроль. Вы сами решаете, что делать в промежутках отсутствия сетевых данных.


4. Объяснено во втором пункте.

Выдача 1 ради стимуляции чтения и выхода как ошибка чтения.



Ваши выводы неверные.

Такова природа TCP/IP транспорта, где вообще гарантий нет. Там и в сетевые черные дыры можно влететь на фильтрах/файрволах, когда нет части TCP сигналлинга. Сырой контроль таймаутов и потока данных позволяет их детектить и самостоятельно рвать соединения.

Мы дали сырой/прямой интерфейс доступа к сетевым функциям, включая TLS реализации. Если вы ими пользуетесь, то именно вам нужно правильно оборачивать сырые функции в защитный/контролируемый обработчик SocketIsReadible/SocketRead.

Если же вы хотите делать высокоуровневые запросы без необходимости думать о мелочах, то есть WebRequest функции. Там все защиты встроены.

Спасибо большое за предоставленный ответ.

На мой скромный взгляд все же:
1.  Если функции SocketRead и SocketTlsRead выполняют одно и тоже действие, то, по хорошему, они должны иметь одинаково адаптированные интерфейсы.

2. а) да, ни чего не знаю про проблемы детекции разрыва TCP соединения;
б) от функции SocketIs*, в соответствии с рекомендациями по именованию функций, ожидается получить True/False результат, но ни как не uint; (Где такое вычитал? Если не ошибаюсь в трудах Скотта Мейерса в 2014 году.)
c) спасибо за объяснение почему SocketIsReadible может возвращать значение 1, если TCP соединение вообще не было установлено (заранее отсутствовал интернет или домен не добавлен в список разрешенных).
Прошу добавить соответствующее описание также в документацию.

3,4) Понял, спасибо.

 

Привет всем.

Прошу помощи в решении проблемы с тестировшиком MT5 версии 1940 - не считается Profit. Имею 3 версии MT5 (от брокера и скаченный с сайта производителя), установленные на разных ПК, везде результат одинаковый - не считается Profit, не работает тестирование и оптимизация.

Для наглядности записал видео.


 

В браузере K-Meleon в сообщениях не показывается текст

K-Meleon :: Главная
K-Meleon :: Главная
  • kmeleon.geckoworld.ru
На этой неделе суммарное число загрузок всех версий Pro-сборки K-Meleon (75-76 Pro) по официальным ссылкам превысило 100 000! Конечно не каждая загрузка - это новый пользователь, но ведь наш браузер раздается и на торрентах, а также разошелся по другим площадкам, откуда его тоже качают. Таким образом, мы можем уверенно говорить о том, что наше...
 
fxsaber:

В браузере K-Meleon в сообщениях не показывается текст

Это мертвый браузер, нет смысла наверно под него что то крутить...

 
Vladimir Pastushak:

Это мертвый браузер, нет смысла наверно под него что то крутить...

К ресурсам не требовательный.

 
fxsaber:

К ресурсам не требовательный.

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

Попробуйте Vivaldi бета версию, удобный, быстрый, много удобств, много настроек, поддерживает приложения хрома....

 
При попытке обновления своего скрипта в кодобазе получаю единственную ошибку
main file not found

единственный MQ5-файл находится по этому пути

MQL5\Scripts\fxsaber\

Как починить?


ЗЫ Висит статус "Проверяется модератором".

ЗЫЫ Поместил mq5-файл просто в Scripts - та же реакция.
 
fxsaber:
При попытке обновления своего скрипта в кодобазе получаю единственную ошибку

единственный MQ5-файл находится по этому пути

Как починить?


ЗЫ Висит статус "Проверяется модератором".

ЗЫЫ Поместил mq5-файл просто в Scripts - та же реакция.
Не писать в путь свою папку.
 
Vladimir Karputov:
Не писать в путь свою папку.

Выбрав "по-умолчанию", сработало. Но только такой вариант - это не правильно.

Очень неразумно все скрипты пихать в одну папку. Должна же быть систематизация хотя бы по подпапкам.

 
fxsaber:

Выбрав "по-умолчанию", сработало. Но только такой вариант - это не правильно.

Очень неразумно все скрипты пихать в одну папку. Должна же быть систематизация хотя бы по подпапкам.

Я уже недавно как раз о индивидуальных папках спрашивал, дали ответ: «всё в кучу» и пока менять не будут.
Если сильно нужно для инклюдников я дописываю в имя файла “KVN”.
Причина обращения: