我正在使用boost :: asio。
在C ++中实现一个基本的HTTP Server当我处理每个请求时,我会异步地以块的形式写出数据。如果在任何时候我知道客户端已不再连接,我想中止处理,例如如果客户不再存在,那么继续构建结果是没有意义的。
我认为这已经有过几次了,例如:
How can I check if a client disconnected through Winsock in C++?
但是我读它们,我仍然不确定这里有什么好方法。
答案 0 :(得分:1)
如果客户端断开连接,则应该使用适当的错误代码使异步写入失败。当调用带有错误的完成处理程序时,则中止处理。
答案 1 :(得分:0)
有三件事需要考虑(虽然如何使用提升,我不知道)
检测客户端的干净关闭。这是通过客户端的read()完成的。读取返回0意味着另一端已关闭连接,如果您正在实施http流水线操作,您可能还是必须继续从客户端读取。
检测到客户端上的不干净关闭,write()最终应该失败,read()也会出错
然后就是客户刚刚消失的情况,或者是一个恶意慢的读者/作者,你必须实施;