c#endread怎么打印出来_c# – Socket.EndRead 0字节意味着断开连接?
我想知道在c#中的異步套接字中,在EndRead調用中接收0個字節意味著服務器實際上已經斷開了我們的連接嗎?
我看到的很多例子都表明情況就是這樣,但我收到的斷線頻率要高得多.
這段代碼是否正確?或者endResult< = 0對連接狀態沒有任何意義?
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讀取長度應該意味著gracefull關閉.斷開連接拋出error(10054,10053或10051).
實際上雖然我確實注意到讀取完成時長度為0,即使連接處于活動狀態,唯一的處理方法是檢查0長度讀取時的套接字狀態.情況如下:在套接字上發布多個緩沖區以進行接收.然后發布的線程被池修剪.操作系統注意到發出請求的線程已經消失,它會通過錯誤995 ERROR_OPERATION_ABORTED通知發布的操作,如文檔所述.然而,我發現當發布多個操作(即多次讀取)時,只有第一個通知錯誤995,后續通知成功和0長度.
標簽:c,asynchronous,sockets
來源: https://codeday.me/bug/20190610/1214495.html
總結
以上是生活随笔為你收集整理的c#endread怎么打印出来_c# – Socket.EndRead 0字节意味着断开连接?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 优派tb4519支持3D吗
- 下一篇: 绿豆百合汤的功效与作用、禁忌和食用方法