【问题标题】:Boost.Asio - Make sure that other party received dataBoost.Asio - 确保对方收到数据
【发布时间】:2013-01-20 00:20:01
【问题描述】:

我正在使用 boost::asio 并向客户端发送列表并在完成后关闭套接字。不知何故,客户端有时在收到所有内容之前收到文件结束错误。

我猜这与服务器在发送最后一个列表条目后立即关闭套接字有关。有没有一种简单的方法可以解决这个 async_send 只有在数据发送成功后才调用处理程序?

或者我的文件结束错误来自其他原因?

【问题讨论】:

  • 定义“完成时”。给我们看一些代码。

标签: c++ boost boost-asio


【解决方案1】:

Boost.Asio 是一个独立于操作系统的抽象层,基于 TCP 和 UDP 套接字。它们不保证其他应用程序已接收并处理了数据。您需要在您的应用程序中包含此逻辑,您可能需要研究OSI model

如果您在async_send() 返回后立即关闭套接字,这是不正确的。只有在调用完成处理程序后才应关闭它。

【讨论】:

  • 在完成处理程序中关闭它怎么样?这就是我正在做的 atm 但似乎不起作用。
  • @jhasse 在完成处理程序中关闭套接字在语义上与调用后关闭相同。如果您需要帮助,您应该在问题中发布您的代码。
猜你喜欢
  • 2015-11-28
  • 2010-09-30
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 2014-11-25
  • 1970-01-01
  • 2022-12-06
  • 1970-01-01
相关资源
最近更新 更多