Tidhttp.connectTimeout не работает! - PullRequest
4 голосов
/ 24 ноября 2010

Так что я использую tidhttp для отправки запросов. когда я пытаюсь установить connectTimeout любой период времени, это не имеет никакого эффекта. Я все еще жду ~ 5 секунд, прежде чем получу исключение. Заранее спасибо!

1 Ответ

8 голосов
/ 25 ноября 2010

Если вы подключаетесь к имени хоста вместо IP-адреса, имя хоста должно быть преобразовано в IP через поиск DNS, что может занять некоторое время, особенно если ОС еще не кэшировала имя хоста.Свойство ConnectTimeout не учитывает это время.

Кроме того, когда ConnectTimeout не равен нулю или если используется TIdAntiFreeze, Indy должен использовать внутренний рабочий поток для выполнения фактического вызова API-интерфейса сокетасервер.Запуск нового потока может занять некоторое время, в зависимости от доступных системных ресурсов на данный момент.ConnectTimeout также не учитывает это время.

Текущая реализация ConnectTimeout применяется только к самому вызову connect () API сокета, а не к какой-либо дополнительной работе, необходимой для достижения этой точки.Таким образом, если у вас установлено 5-секундное значение ConnectTimeout, можно пройти более 5 секунд, прежде чем TIdTCPClient.Connect () завершится.

...