我正在编写一个小型客户端类,该类使用boost asio连接到远程套接字。如果初始连接失败,它应该能够尝试重新连接。
在针对这种情况进行测试时,即没有打开的远程套接字,则第一次正确调用了async_connect的完成处理程序。但是当m_state再次进入State_Connect时,将不再为第二次尝试再次调用我的完成处理程序。我在做什么错了?
cp
输出为: 开始连接 无法连接 开始连接
但是我希望它会无限期地重复。
答案 0 :(得分:2)
当io_context对象停止时,调用run(),run_one(), poll()或poll_one()将立即返回而无需调用任何 处理程序。
当您调用poll_one()
并且没有准备好任何处理程序时,io_service
函数会将poll_one()
标记为已停止。当m_state
为State_Connecting
时io_service
无关,此时由于处理程序队列空,io_service被标记为已停止。
您可以测试reset
是否停止,如果这样,请致电if (m_io.stopped())
m_io.reset();
m_io.poll_one();
:
express