我有一个服务器应用程序,我只接受一个boost::asio::ip::tcp::acceptor
和async_accept
的客户端。
我运行客户端应用程序并使用boost::asio::ip::tcp::socket
和async_connect
成员函数成功连接。
然后我让客户端崩溃(CTRL-ALT-DEL)。
如果我重新启动客户端应用程序,并尝试重新连接,则会成功...
即使我没有在服务器端重做async_accept
。
这怎么可能?
编辑:
如果服务器应用程序未运行,则async_connect
将失败。
答案 0 :(得分:3)
这是可能的,因为接受器仍处于监听状态。处于侦听状态时,传入连接将排队,直到accept()
操作接受它们。有关接受者状态和操作的更多详细信息,请参阅this答案。
要获得所需的行为,只需在接受连接后close()
接受者。连接关闭后,通过执行open() -> bind() -> listen()
将接受器转换回侦听状态。