我有一個使用asio的異步TCP/IP客戶端。當連接丟失時,async_read的句柄函數會收到錯誤。所以我得知連接丟失了。boost asio:如何監控tcp連接是否有效
現在,我重構了一些遺留代碼,實現了一個同步TCP/IP客戶端,其中抽象接口強制執行此序列:同步寫入,然後是同步讀取。 用asio做這件事很簡單,但我想知道異步如果連接丟失。
有沒有更優雅的方式比:
選項A: 添加,檢查線程如果套接字仍然活着(通過嘗試讀取...但我怎麼能肯定的是,讀不從我的同步讀竊取數據見Boost asio ip tcp iostream Error Detection)
選項B: 使用async_read代替和,並模擬同步閱讀
我認爲答案是否定的。但也許有一些特定於平臺的解決方案。 – mirk 2012-04-05 13:49:12
我不認爲TCP協議可以檢測到連接失敗,除非它在特定的時間範圍內未收到對發送的數據包的確認。 – Ferruccio 2012-04-05 23:18:01
我已經實現了選項B.但是,有兩件事我不明白1.斷開連接未被檢測到2.如果我拔掉了服務器(即打印機)的以太網電纜,我仍然可以發送數據並且它不返回錯誤。只有第二次,它會拋出一個錯誤 – DoogQc 2012-04-06 20:08:56