HTTP代理检测HTTP客户端断开连接

时间:2012-05-24 15:11:25

标签: c++ http networking keep-alive poco-libraries

我是HTTP的新手,并开发了一个应用代理。 我想避免为操作定义超时,而是依靠客户端来关闭连接。 我想知道这是否可行?

这是一个非常愚蠢的伪代码

void handle_request(Request http_request, Response http_response)
{
   string modified_request = parse(http_request);
   response_from_server = remote_server->send_request(modified_request);
   while(true) {
     if(response_from_server ->wait_for_data(1000 /* milliseconds */)) {
       http_response->write_data(response_from_server->read_data());
       continue;
     }

     if(!http_response.check_if_the_client_connection_to_me_is_still_active()) // how to do this?
         return;
     }
   }
}

另一种问这个问题的方法是:

  1. 在HTTP代理中,我可以使用远程静音和远程服务器的超时而不添加另一个超时吗?
  2. 如何检测远程服务器或远程客户端是否超时?
  3. 顺便说一句,我正在使用Poco在C ++中开发。

1 个答案:

答案 0 :(得分:1)

无法在不使用超时的情况下编写严重的TCP应用程序。在某些情况下,它们是您在阅读时检测断开连接的唯一方法。 TCP提供了以下检测断开连接的方法:

  1. 阅读时的各种EOS条件。
  2. 写入或偶尔读取时“连接重置”。
  3. 读取超时。
  4. 就是这样。已经没有了。

    您还应该从最终开始启用TCP keepalive,但这只会在两小时后启动。