代码之家  ›  专栏  ›  技术社区  ›  waterlooalex

HTTP服务器(使用套接字)应该如何检测客户端不再连接并中止处理?

  •  0
  • waterlooalex  · 技术社区  · 15 年前

    我用C++实现了一个基本的HTTP服务器,使用Boosi::asIO。

    当我处理每一个请求时,我都会将数据分块、异步地写出来。如果在任何时候我知道客户端不再连接,我想中止处理,例如,如果客户端不再存在,继续建立结果以发送出去是没有意义的。

    我想这已经被问了好几次了,例如:

    How can I check if a client disconnected through Winsock in C++?

    但我读了他们,我仍然不知道这是一个好办法。

    • 我可以尝试从客户端套接字读取数据吗?(即使知道另一端的HTTP客户机不会发送任何数据)
    2 回复  |  直到 7 年前
        1
  •  1
  •   bdonlan    15 年前

    如果客户端断开连接,您的异步写入应该会失败,并返回相应的错误代码。当用错误调用完成处理程序时,中止处理。

        2
  •  0
  •   nos    15 年前

    有三件事需要考虑(尽管我不知道如何使用boost实现)

    • 从客户端检测到完全关闭。这是由客户端的read()完成的。read返回0意味着另一端已经关闭了连接,如果您正在实现http管道,那么您可能必须继续从客户端读取。

    • 如果在客户端检测到不干净的关闭,write()最终会失败,read()也会出错

    在这两种情况之间,客户机消失了,或者是一个恶意的慢读写器,您将不得不实现;