錯(cuò)誤碼很重要,可以由此判斷網(wǎng)絡(luò)連接到底發(fā)生了神馬事情,從而驅(qū)動(dòng)高層邏輯的行為。只有籠統(tǒng)的錯(cuò)誤碼判斷的網(wǎng)絡(luò)層是不夠規(guī)范的,鄙人覺得有些錯(cuò)誤碼還是需要在網(wǎng)絡(luò)層就區(qū)分開的,特此記錄一些當(dāng)前實(shí)驗(yàn)的錯(cuò)誤碼以及發(fā)生原因。
以下是一部分在async_receive()的handler處捕獲到的比較有用的錯(cuò)誤碼
錯(cuò)誤碼(十進(jìn)制) |
枚舉 |
發(fā)現(xiàn)原因 |
10009 |
boost::asio::error::bad_descriptor |
在一個(gè)已經(jīng)關(guān)閉了的套接字上執(zhí)行async_receive() |
995 |
boost::asio::error::operation_aborted |
正在async_receive()異步任務(wù)等待時(shí),本端關(guān)閉套接字 |
10054 |
boost::asio::error::connection_reset |
正在async_receive()異步任務(wù)等待時(shí),遠(yuǎn)端的TCP協(xié)議層發(fā)送RESET終止鏈接,暴力關(guān)閉套接字。常常發(fā)生于遠(yuǎn)端進(jìn)程強(qiáng)制關(guān)閉時(shí),操作系統(tǒng)釋放套接字資源。 |
2 |
boost::asio::error::eof |
正在async_receive()異步任務(wù)等待時(shí),遠(yuǎn)端關(guān)閉套接字,這里跟10054發(fā)生的情況似乎一樣,但是實(shí)際上應(yīng)該是有區(qū)別的,具體神馬區(qū)別,由回復(fù)中jack的說法,這個(gè)是遠(yuǎn)端正常關(guān)閉套接字。 |
只是一些淺陋的測(cè)試,目前覺得有用的也就是這幾個(gè),不正確的地方請(qǐng)送我雞蛋。