我有一个套接字,它等待数据并尝试发送一些(async_read / async_write),在某些时候我想取消只读,可能在稍后阶段重新初始化它。
有可能吗?
答案 0 :(得分:2)
遗憾的是,在asio中中止特定的异步操作相当困难。通常,只有完全关闭套接字才能可靠地中止挂起的异步操作。
在实践中,这不像人们想象的那样有限:如果允许在任何时候取消异步操作,则很难推断出连接的状态。在您的示例中,即使您取消了不需要的读取,仍然必须从套接字中删除它应该检索的数据,以便后续读取可以以干净状态开始。在这种控制水平下很难确保这一点。
相反,请考虑完成异步读取操作并使用程序逻辑来确定如何处理读取数据:如果操作被标记为已取消,则可能只是想丢弃数据。
答案 1 :(得分:1)
也许您需要关闭套接字?
socket.shutdown(boost::asio::ip::tcp::socket::shutdown_receive);
在致电shutdown
后,您的套接字将无法接收新数据。