情景:
Delphi 2010从svn trunk运行最新的Indy版本。
我有一个使用idHTTP发送http请求的应用程序。只要应用程序正在运行,此idHTTP只创建一次并保存在内存中。我向同一个http服务器(也是我开发的应用程序)发送了大量的Web请求。
我正在使用keep-alive来保持套接字连接。
在多次请求之后,我在客户端获得了EIdConnClosedGracefully
,并且在得到此异常之后我没有做什么,对同一服务器的每个关注请求都会产生相同的异常 。
我试图断开连接,关闭套接字,清除IOHandler缓冲区并且没有任何效果。
如果我销毁IdHttp对象并在异常发生后重新创建它,一切正常。但这不是我想要的,因为我需要一直连接到服务器(以避免TIME_WAITS等)。
有没有人知道如何在客户端处理EIdConnClosedGracefully
异常,并在发生异常后使idHttp正常工作?
修改
我自己开发了Web服务器,我肯定不会在客户端请求后断开连接。我知道这个例外没问题,但是不好的是套接字在那之后变得无法使用。 Indy应该从此异常中恢复,断开套接字并在需要时重新连接它。正如我所说,这个例外正在向用户展示,而不仅仅是在Delphis IDE上。我真正需要的是获得此异常后的一种方式,我必须能够继续使用此套接字。 -
答案 0 :(得分:7)
调用TIdHTTP.Disconnect(False)
和TIdHTTP.IOHandler.InputBuffer.Clear()
应该是恢复所需的全部内容。