提升asio取消读取而不取消写入

时间:2013-11-20 08:20:21

标签: c++ boost boost-asio

我有一个套接字,它等待数据并尝试发送一些(async_read / async_write),在某些时候我想取消只读,可能在稍后阶段重新初始化它。

有可能吗?

2 个答案:

答案 0 :(得分:2)

遗憾的是,在asio中中止特定的异步操作相当困难。通常,只有完全关闭套接字才能可靠地中止挂起的异步操作。

在实践中,这不像人们想象的那样有限:如果允许在任何时候取消异步操作,则很难推断出连接的状态。在您的示例中,即使您取消了不需要的读取,仍然必须从套接字中删除它应该检索的数据,以便后续读取可以以干净状态开始。在这种控制水平下很难确保这一点。

相反,请考虑完成异步读取操作并使用程序逻辑来确定如何处理读取数据:如果操作被标记为已取消,则可能只是想丢弃数据。

答案 1 :(得分:1)

也许您需要关闭套接字?

socket.shutdown(boost::asio::ip::tcp::socket::shutdown_receive);

在致电shutdown后,您的套接字将无法接收新数据。

相关问题