天天看點

關于boost asio 的問題

這兩天在review用戶端NetworkClient的代碼,

因為之前遇到了 斷開第一次連結後,再想連結就再也連結不上的問題。

最後查到因為我的io_service沒有構造出一個 work,

boost::io_serivice 需要有個io_service::work來keep住,

如果沒有work,在一次啟動的時候io線程是正常運作的(是以之前一直沒有什麼問題,因為我用戶端隻做一次連接配接),但是在close掉并做第二次連接配接的時候,io線程就exit了,

是以想再去做第二次連接配接是不可能成功的。

之中還遇到一個問題,如果調用過io_serivce.stop,重新起io線程去run的話,是并沒有什麼卵用的。是以在用戶端不準備做任何socket重連之前,不要掉用io_service.stop,

否則你需要重新構造一個io_service并帶上work,才能再次啟動網絡子產品。 

建議放在NetworkClient的析構函數中,或者不調用,因為析構io_service析構函數會處理一切。