2

我有一个服务器应用程序,其中我只接受一个带有boost::asio::ip::tcp::acceptor和的客户端async_accept

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

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

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

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

这怎么可能?

编辑:

如果服务器应用程序没有运行,async_connect那么它应该会失败。

4

1 回答 1

3

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

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

于 2013-05-15T17:29:44.800 回答