考虑以下使用async connect模拟带超时的同步连接的代码:
{
boost::asio::steady_timer timer{io_service, timeout};
timer.async_wait([&socket](boost::system::error_code const& code) {
if (!code)
socket.close();
});
auto future = boost::asio::async_connect(socket, endpoint, boost::asio::use_future);
future.get();
}
/* detect post-success cancelation? */
if (!socket.is_open()) {
}
如果我正确理解了asio文档,我不能保证在is_open()已经返回true之后定时器处理程序不会关闭套接字,因为这样的事件序列是可能的:
如何修复此代码以防止出现这种情况?