2013-05-15 31 views
2

我有一個服務器應用程序,我只接受一個客戶端boost::asio::ip::tcp::acceptorasync_accept升級ASIO async_connect在失敗時成功,爲什麼?

我運行客戶端應用程序併成功使用boost::asio::ip::tcp::socketasync_connect成員函數連接。

然後我讓客戶端崩潰(CTRL-ALT-DEL)。

如果我重新啓動客戶端應用程序,並嘗試重新連接,它成功...

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

這怎麼可能?

編輯:

如果服務器應用程序沒有運行,則async_connect失敗,因爲它應該。

回答

3

這是可能的,因爲接受者仍處於聆聽狀態。處於監聽狀態時,傳入的連接將排隊,直到它們被accept()操作接受。有關受體的狀態和操作的更多細節可以在this答案中找到。

爲了獲得所需的行爲,只需在接受連接後接受方close()。連接關閉後,通過執行open() -> bind() -> listen()將接受器轉換回收聽狀態。

相關問題