2013-01-20 32 views
4

我正在使用boost :: asio并向客户端发送列表,并在完成时关闭套接字。不知怎的,客户端有时收到所有内容之前得到一个文件结束错误。Boost.Asio - 确保其他方收到数据

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

或者是我的文件结束错误来自其他东西?

+2

定义“完成时”。并向我们​​展示一些代码。 – 2013-01-20 03:04:35

回答

2

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

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

+0

在完成处理程序中关闭它怎么样?这就是我在做atm,但似乎没有工作。 – jhasse

+0

@jhasse关闭完成处理程序内部的套接字在语义上与调用它之后的关闭相同。如果您需要帮助,您应该在问题中发布代码。 –