現象:阻塞狀態的accept返回了10004,也就是WSAENTER。
解決:
1、查MSDN上的說明是"A blocking Windows Sockets 1.1 call was canceled through WSACancelBlockingCall",毫無思路。
2、在網上沒有找到直接的幫助,倒是看到有幾個例子對於accept遇到該問題後沒有處理,直接continue。
3、本着“死馬當活馬醫”的態度,用這種方法試了一下,出現新的錯誤10093,與socket庫的初始化有關。
4、從該錯誤中獲得啓發,看了一下處理數據的線程,其中在recv失敗後會調WSACleanup,這點是問題的根本原因。(服務端程序原來很簡單,是單線程的,這樣做出錯處理問題不大,但改成多線程後沒有注意這一點)
結論:
1、整個錯誤是由於客戶端裏某個線程結束導致連接斷開,服務端裏某個線程recv失敗,之後調WSACleanup,結果導致主線程accept錯誤。
解決:
1、查MSDN上的說明是"A blocking Windows Sockets 1.1 call was canceled through WSACancelBlockingCall",毫無思路。
2、在網上沒有找到直接的幫助,倒是看到有幾個例子對於accept遇到該問題後沒有處理,直接continue。
3、本着“死馬當活馬醫”的態度,用這種方法試了一下,出現新的錯誤10093,與socket庫的初始化有關。
4、從該錯誤中獲得啓發,看了一下處理數據的線程,其中在recv失敗後會調WSACleanup,這點是問題的根本原因。(服務端程序原來很簡單,是單線程的,這樣做出錯處理問題不大,但改成多線程後沒有注意這一點)
結論:
1、整個錯誤是由於客戶端裏某個線程結束導致連接斷開,服務端裏某個線程recv失敗,之後調WSACleanup,結果導致主線程accept錯誤。