Можно ли немедленно прекратить TCPClient? - PullRequest
1 голос
/ 24 марта 2011

Мое приложение отправляет данные на сервер с помощью TidTCPClient. Сервер использует TidTCPServer. Все отлично работает, и сейчас я пытаюсь справиться с непредвиденными ситуациями.

Когда я отключаю сетевой кабель между сервером и клиентом, а затем пытаюсь закрыть клиент, он долго ждет, пока он окончательно не закроется:

TCPClient.IOHandler.InputBuffer.Clear;
TCPClient.Disconnect;
TCPClient.Free;

TCPClient.Free - это место, где он ждет. Иногда это 30 секунд, иногда даже больше.

Есть ли способ немедленно прекратить TCPClient, независимо от того, что он делает в этот момент?

Ответы [ 2 ]

1 голос
/ 25 марта 2011

Вы должны очистить InputBuffer после вызова Disconnect(), а не до этого.

В любом случае, нет причин для сокета вызывать такое зависание при отключении / освобождении TIdTCPClient, если вы не возились с опциями LINGER сокета.Поэтому я должен подозревать, что ваш собственный код виноват в первую очередь.Какую версию Indy вы используете?У вас есть обработчики событий, назначенные на TIdTCPClient?Вы пробовали пройти через деструктор TIdTCPClient в отладчике, чтобы увидеть, что на самом деле происходит?

0 голосов
/ 24 марта 2011

Вероятно, время ожидания истекло. Посмотрите на свойства компонента, чтобы уменьшить значение тайм-аута

...