Delphi Indy IdHttpServer了解Connection.Socket.ReadTimeout是如何工作的

时间:2016-02-26 10:55:06

标签: sockets delphi tcp indy idhttp

我想在TIdHttpServer上进行近距离空闲连接。

这里https://stackoverflow.com/a/35107685/2936170我找到了

  

[...] ReadTimeout属性可用于断开>的慢/死客户端。不及时发送请求。

在TIdHttpServer服务器上,我已在OnConnect事件上将ReadTimeout设置为1秒

begin
   IdHTTPServer.KeepAlive        := False;
   IdHTTPServer.OnConnect        := OnConnect;
   IdHTTPServer.DefaultPort      := 80;
   IdHTTPServer.AutoStartSession := False;
   IdHTTPServer.SessionState     := False;

   IdHTTPServer.Active           := True;
end;

procedure OnConnect(AContext: TIdContext);
begin
   AContext.Connection.Socket.ReadTimeout := 1000; // 1 second
end;

为测试服务器超时,我创建了一个简单的客户端,并与TIdTCPClient建立TCP连接

begin
    IdTCPClient.Port := 80;
    IdTCPClient.Host := '127.0.01';
    IdTCPClient.Connect;
end;

在Windows网络活动部分,从资源监视器,我在tpc连接列表中看到客户端和服务器连接。 每个连接(服务器和客户端)都会持续超过服务器超时...

为什么IdHttpServer不会通过readtimeout关闭连接?

更新1

tcp连接在2分钟后消失(但我的超时是1秒)。

更新2

如果我注释掉readtimeout行,连接永远不会消失。 IdHTTPServer似乎有一个defaut无限超时。我认为readtimeout工作,但Windows网络活动不是实时状态信息。

0 个答案:

没有答案