当它失败时,提升ASIO async_connect成功,为什么?

时间:2013-05-15 16:56:55

标签: c++ boost tcp boost-asio

我有一个服务器应用程序,我只接受一个boost::asio::ip::tcp::acceptorasync_accept的客户端。

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

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

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

即使我没有在服务器端重做async_accept

这怎么可能?

编辑:

如果服务器应用程序未运行,则async_connect将失败。

1 个答案:

答案 0 :(得分:3)

这是可能的,因为接受器仍处于监听状态。处于侦听状态时,传入连接将排队,直到accept()操作接受它们。有关接受者状态和操作的更多详细信息,请参阅this答案。

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