Мое приложение зависает при вызове процедуры TIdStackWindows.Connect
. Когда TCP / IP-адрес существует, проблем нет, но если нет, я зависаю. IP-адрес является буквальным, поиск в DNS не выполняется. Я ожидал, что попытка подключения завершится неудачно после тайм-аута (TCPClient.ConnectTimeout
), который я установил в 1 секунду, но приложение зависает до 30 секунд при этом вызове (вызов из моего приложения не связан с потоком. Я намерен переместить TCP-соединение к потоку, но длительный тайм-аут соединения по-прежнему будет проблемой).
Если я приостановлю выполнение в среде IDE Delphi, когда приложение не отвечает, я окажусь по адресу:
ntdll.KiUserApcDispatcher:
7C90E450 8D7C2410 lea edi,[esp+$10]
Я затем нажимаю F8 пару раз, пока не увижу фрейм стека. Я тогда нахожусь в:
IdStack.TIdStack.RaiseSocketError(10038)
IdStack.TIdStack.RaiseLastSocketError
IdStack.TIdStack.CheckForSocketError(-1)
IdStackWindows.TIdStackWindows.Connect(912,'10.8.2.170',5001,Id_IPv4)
IdSocketHandle.TIdSocketHandle.Connect
IdIOHandlerStack.TIdConnectThread.Execute
:00451fc1 HookedTThreadExecute + $2D
Classes.ThreadProc($254B910)
System.ThreadWrapper($5456CB0)
:00451ea3 CallThreadProcSafe + $F
:00451f10 ThreadExceptFrame + $3C
:7c80b729 ; C:\WINDOWS\system32\kernel32.dll
После небольшого осмотра я заметил, что эта тема получила небольшой трафик. Обычный ответ, кажется, «положи это в ветку». Я собираюсь это сделать, но длительный тайм-аут все равно будет проблематичным. Почему не работает тайм-аут подключения? Я использую Indy 10.5.5 и Delphi 2006 - если я обновлюсь до последней сборки Indy, потребуется ли много времени для миграции?