升级ASIO async_connect在失败时成功,为什么?

问题描述:

我有一个服务器应用程序,我只接受一个客户端boost::asio::ip::tcp::acceptorasync_accept升级ASIO async_connect在失败时成功,为什么?

我运行客户端应用程序并成功使用boost::asio::ip::tcp::socketasync_connect成员函数连接。

然后我让客户端崩溃(CTRL-ALT-DEL)。

如果我重新启动客户端应用程序,并尝试重新连接,它成功...

即使我不重做在服务器端的async_accept

这怎么可能?

编辑:

如果服务器应用程序没有运行,则async_connect失败,因为它应该。

这是可能的,因为接受者仍处于聆听状态。处于监听状态时,传入的连接将排队,直到它们被accept()操作接受。有关受体的状态和操作的更多细节可以在this答案中找到。

为了获得所需的行为,只需在接受连接后接受方close()。连接关闭后,通过执行open() -> bind() -> listen()将接受器转换回收听状态。