c#endread怎么打印出来_c# – Socket.EndRead 0字节意味着断开连接?
我想知道在c#中的異步套接字中,在EndRead調(diào)用中接收0個(gè)字節(jié)意味著服務(wù)器實(shí)際上已經(jīng)斷開(kāi)了我們的連接嗎?
我看到的很多例子都表明情況就是這樣,但我收到的斷線頻率要高得多.
這段代碼是否正確?或者endResult< = 0對(duì)連接狀態(tài)沒(méi)有任何意義?
private void socket_EndRead(IAsyncResult asyncResult)
{
//Get the socket from the result state
Socket socket = asyncResult.AsyncState as Socket;
//End the read
int endResult = Socket.EndRead(asyncResult);
if (endResult > 0)
{
//Do something with the data here
}
else
{
//Server closed connection?
}
}
解決方法:
0讀取長(zhǎng)度應(yīng)該意味著gracefull關(guān)閉.斷開(kāi)連接拋出error(10054,10053或10051).
實(shí)際上雖然我確實(shí)注意到讀取完成時(shí)長(zhǎng)度為0,即使連接處于活動(dòng)狀態(tài),唯一的處理方法是檢查0長(zhǎng)度讀取時(shí)的套接字狀態(tài).情況如下:在套接字上發(fā)布多個(gè)緩沖區(qū)以進(jìn)行接收.然后發(fā)布的線程被池修剪.操作系統(tǒng)注意到發(fā)出請(qǐng)求的線程已經(jīng)消失,它會(huì)通過(guò)錯(cuò)誤995 ERROR_OPERATION_ABORTED通知發(fā)布的操作,如文檔所述.然而,我發(fā)現(xiàn)當(dāng)發(fā)布多個(gè)操作(即多次讀取)時(shí),只有第一個(gè)通知錯(cuò)誤995,后續(xù)通知成功和0長(zhǎng)度.
標(biāo)簽:c,asynchronous,sockets
來(lái)源: https://codeday.me/bug/20190610/1214495.html
總結(jié)
以上是生活随笔為你收集整理的c#endread怎么打印出来_c# – Socket.EndRead 0字节意味着断开连接?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 优派tb4519支持3D吗
- 下一篇: 绿豆百合汤的功效与作用、禁忌和食用方法