這兩天在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析構函數會處理一切。