【问题标题】:Identify a client disconnected from a Socket in C++识别与 C++ 中的 Socket 断开连接的客户端
【发布时间】:2016-10-19 19:42:21
【问题描述】:

我有一个 C++ 服务器,客户端将连接到服务器套接字并获取搜索结果。我正在使用 Boost 库进行 Socket 编程。

客户端连接的所有搜索结果将有 5 个。服务器计算这些搜索结果的成本很高,并且计算是以迭代的方式完成的。现在发生的很多情况是客户端在收到 2 或 3 个搜索结果后断开连接。我想在发出请求的客户端断开连接后立即停止搜索处理线程。确认这一点的最佳 API 调用是什么?如果可能的话,我愿意在 boost 之上编写自己的包装器。

我只使用 HTTP。

谢谢

【问题讨论】:

  • 您使用 HTTP 或 HTTPS(或两者)作为您的协议吗?
  • @owacoder :我在问题中添加了信息。我只使用 HTTP。

标签: c++ sockets networking boost


【解决方案1】:

检测 TCP 断开连接的唯一方法是对其执行 I/O。在向已断开连接的对等方发送一些消息后,您将获得 ECONNRESET。由于 TCP 缓冲,这不会在第一次发送时发生。

【讨论】:

  • 感谢您的信息,但在这种情况下,我实际上最终会向客户端发送恶意消息?
  • @Geek,据我所知,使用 HTTP(S) 处理这些事情的最常见方法是使用连接超时监控(如果在特定时间范围内没有发生任何活动,则断开套接字)。请求接收的超时时间通常比请求处理的超时时间短(例如,在我的facil.io 项目中,默认的传入 http 超时为 5 秒,而响应处理超时为 300 秒)。
猜你喜欢
  • 1970-01-01
  • 2019-09-20
  • 1970-01-01
  • 2012-06-18
  • 2016-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多