asio
asio copied to clipboard
io.stopped() remains true after io.restart() when ASIO_ENABLE_HANDLER_TRACKING is defined
After calling io.restart() when asio_enable_handler_tracking is enabled, stopped() remains true. even though the documentation states otherwise:
Am i making a mistake somewhere :
io.stopped() erroneously remains true after io.restart() with handler tracking
#define ASIO_ENABLE_HANDLER_TRACKING
...
void connect(const EndPoint& endpoint)
{
_logger.logInfo("[AsioPimpl::connect] start");
asio::ip::tcp::endpoint ep(asio::ip::address::from_string(endpoint.ip_address), endpoint.port);
socket.async_connect(ep, [&](auto ec) {
_logger.logInfo("connection complete handler");
_logger.logInfo(ec.message());
});
std::cout << io.stopped() << std::endl;
io.run();
std::cout << io.stopped() << std::endl;
io.reset();
std::cout << io.stopped() << std::endl;
io.restart();
std::cout << io.stopped() << std::endl;
}
output:
[2022.04.14__15:46__45.609572] [tcp] [INFO] [AsioPimpl::connect] start
0
[2022.04.14__15:46__45.610649] [tcp] [INFO] connection complete handler
[2022.04.14__15:46__45.610668] [tcp] [INFO] Success
1
1
1
io.stopped() correctly changes to false after io.restart() without handler tracking
//#define ASIO_ENABLE_HANDLER_TRACKING
...
void connect(const EndPoint& endpoint)
{
_logger.logInfo("[AsioPimpl::connect] start");
asio::ip::tcp::endpoint ep(asio::ip::address::from_string(endpoint.ip_address), endpoint.port);
socket.async_connect(ep, [&](auto ec) {
_logger.logInfo("connection complete handler");
_logger.logInfo(ec.message());
});
std::cout << io.stopped() << std::endl;
io.run();
std::cout << io.stopped() << std::endl;
io.reset();
std::cout << io.stopped() << std::endl;
io.restart();
std::cout << io.stopped() << std::endl;
}
output:
[2022.04.14__15:49__59.403527] [tcp] [INFO] [AsioPimpl::connect] start
0
[2022.04.14__15:49__59.404528] [tcp] [INFO] connection complete handler
[2022.04.14__15:49__59.404558] [tcp] [INFO] Success
1
0
0
environment: gcc 11.2.0 kernel 5.17.1 asio 1.22.0