【发布时间】:2013-11-20 08:20:20
【问题描述】:
我有一个套接字,它既等待数据又尝试发送一些数据(async_read / async_write),在某些时候我想取消只读,可能在稍后阶段重新初始化它。
有可能吗?
【问题讨论】:
标签: c++ boost boost-asio
我有一个套接字,它既等待数据又尝试发送一些数据(async_read / async_write),在某些时候我想取消只读,可能在稍后阶段重新初始化它。
有可能吗?
【问题讨论】:
标签: c++ boost boost-asio
不幸的是,在 asio 中中止特定的异步操作相当困难。通常,只有完全关闭套接字才能可靠地中止挂起的异步操作。
实际上,这并没有人们想象的那么大的限制:如果您允许在任何时候取消异步操作,则很难推断连接的状态。在您的示例中,即使您取消了不需要的读取,它应该检索的数据仍然必须从套接字中删除,以便后续读取可以以干净状态开始。在这种控制级别上很难确保这一点。
相反,请考虑让异步读取操作完成并使用程序逻辑来确定如何处理读取的数据:如果操作被标记为已取消,您可能只是想丢弃数据。
【讨论】:
也许你需要关闭你的套接字?
socket.shutdown(boost::asio::ip::tcp::socket::shutdown_receive);
调用shutdown后,您的套接字将无法接收新数据。
【讨论】: