send返回0解析

今天爲了檢測一下send的過程和closesocket如果同時出現是否會衝突,所以故意把send的緩衝區設置的很大(我設置的爲2000000,還沒有溢出int),但是發現不能正常收發數據,各自檢測server和client,發現server可以接收到不全的數據,但是client的send函數卻返回了0,看了一下MSDN,聲明說:如果傳給send的第三個參數len爲0,則send會返回一個有效值0,其他的也沒多說了,網上查看了一下send返回0的情況,很多人說如果socket突然斷開會出現返回0的情況,我沒有試,但因此特意檢查了一下server端看看是否socket已經斷開,由於server用的是IOCP所以當有socket斷開時會受到一個特定的完成消息,但是發現socket連接正常。

根據上面的結果在綜合一下網友的說法只有一個解釋比較恰當:每次可以成功發送的數據包的最大值跟操作系統的緩衝區上限有關,關於操作系統的socket緩衝區不瞭解,問題已經定位好了,可以自己去查緩衝區的問題了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章