Delphi Indy - Eidconnclosedgracefully makes socket unusable

Сценарий:

Delphi 2010 под управлением последней версии Indy из svn trunk.

У меня есть приложение, которое использует idHTTP для отправки http-запросов. Этот idHTTP создается только один раз и хранится в памяти до тех пор, пока работает приложение. Я отправляю множество веб-запросов на один и тот же http-сервер (который также является приложением, разработанным мной).

Я использую keep-alive для поддержания соединения с сокетом.

После нескольких запросов я получаю EIdConnClosedGracefully на стороне клиента, и независимо от того, что я делаю после получения этого исключения, каждый следующий запрос к тому же серверу генерирует то же исключение.

Я пытался отключиться, закрыть сокет, очистить буфер IOHandler и ничего не помогло.

Если я уничтожу объект IdHttp и воссоздам его после возникновения исключения, все работает нормально. Но это не то, чего я хочу, потому что мне нужно постоянно быть подключенным к серверу (чтобы избежать TIME_WAITS и так далее).

Кто-нибудь знает, как обработать исключение EIdConnClosedGracefully на стороне клиента и заставить idHttp работать после возникновения этого исключения?

EDIT

Я сам разрабатывал веб-сервер, и я уверен, что он не отключается после запроса клиента. Я знаю, что это исключение нормально, но что не нормально, так это то, что сокет становится непригодным для использования после этого. Indy должен восстанавливаться после этого исключения, отключая сокет и подключая его снова, когда это необходимо. Как я уже сказал, это исключение показывается пользователю, а не только на Delphis IDE. Что мне действительно нужно, так это способ, чтобы после получения этого исключения я мог продолжать использовать этот сокет. -

7
задан Marcus Adams 28 November 2011 в 22:06
поделиться