Delphi Indy - Eidconnclosedgracefully使套接字无法使用

时间:2011-11-28 12:38:40

标签: delphi http sockets delphi-2010 indy

情景:

Delphi 2010从svn trunk运行最新的Indy版本。

我有一个使用idHTTP发送http请求的应用程序。只要应用程序正在运行,此idHTTP只创建一次并保存在内存中。我向同一个http服务器(也是我开发的应用程序)发送了大量的Web请求。

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

在多次请求之后,我在客户端获得了EIdConnClosedGracefully,并且在得到此异常之后我没有做什么,对同一服务器的每个关注请求都会产生相同的异常

我试图断开连接,关闭套接字,清除IOHandler缓冲区并且没有任何效果。

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

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

修改

我自己开发了Web服务器,我肯定不会在客户端请求后断开连接。我知道这个例外没问题,但是不好的是套接字在那之后变得无法使用。 Indy应该从此异常中恢复,断开套接字并在需要时重新连接它。正如我所说,这个例外正在向用户展示,而不仅仅是在Delphis IDE上。我真正需要的是获得此异常后的一种方式,我必须能够继续使用此套接字。 -

1 个答案:

答案 0 :(得分:7)

调用TIdHTTP.Disconnect(False)TIdHTTP.IOHandler.InputBuffer.Clear()应该是恢复所需的全部内容。