Delphi Indy-Eidconn迅速关闭使插座无法使用



场景:

Delphi2010运行svn-trunk的最新Indy版本。

我有一个使用idHTTP发送http请求的应用程序。这个idHTTP只创建一次,并且在应用程序运行期间一直保存在内存中。我向同一个http服务器(这也是我开发的一个应用程序(发送了很多web请求。

我正在使用keep-alive来保持套接字的连接。

在几次请求之后,我在客户端得到了一个EIdConnClosedGracefully,无论我在得到这个异常之后做什么,对同一服务器的每个后续请求都会生成相同的异常

我尝试断开连接,关闭套接字,清除IOHandler缓冲区,但都没有成功。

如果我销毁IdHttp对象并在异常发生后重新创建它,那么一切都会正常工作。但这不是我想要的,因为我需要一直连接到服务器(以避免time_WAITS等(。

有人知道如何在客户端处理EIdConnClosedGracefully异常,并在该异常发生后使idHttp工作吗?

编辑

我自己开发了网络服务器,我确信不会在客户端请求后断开连接。我知道这个异常是可以的,,但不可以的是套接字在那之后变得不可用。Indy应该从这个异常中恢复,断开插座并在需要时重新连接。正如我所说,这个异常不仅在Delphis IDE上显示给用户。我真正需要的是在得到这个异常之后,我必须能够继续使用这个套接字

您只需要调用TIdHTTP.Disconnect(False)TIdHTTP.IOHandler.InputBuffer.Clear()即可恢复。

最新更新