第一次失败后,再也不会再次调用async_connect上的boost :: asio完成处理程序

时间:2019-01-08 15:32:45

标签: c++ boost-asio

我正在编写一个小型客户端类,该类使用boost asio连接到远程套接字。如果初始连接失败,它应该能够尝试重新连接。

在针对这种情况进行测试时,即没有打开的远程套接字,则第一次正确调用了async_connect的完成处理程序。但是当m_state再次进入State_Connect时,将不再为第二次尝试再次调用我的完成处理程序。我在做什么错了?

cp

输出为:     开始连接     无法连接     开始连接

但是我希望它会无限期地重复。

1 个答案:

答案 0 :(得分:2)

Reference

  

当io_context对象停止时,调用run(),run_one(),   poll()或poll_one()将立即返回而无需调用任何   处理程序。

当您调用poll_one()并且没有准备好任何处理程序时,io_service函数会将poll_one()标记为已停止。当m_stateState_Connectingio_service无关,此时由于处理程序队列空,io_service被标记为已停止。

您可以测试reset是否停止,如果这样,请致电if (m_io.stopped()) m_io.reset(); m_io.poll_one();

express