您好,登錄后才能下訂單哦!
在APUE p610頁,send在發送有邊界的包時(UDP)時,超過一定大小后會報錯,emsgsize;無邊界的流式包時,阻塞模式下會發完所有數據后返回,或者出錯返回。
下面是我對上面話的理解
udp 傳送大包
因udp協議本身是不可靠的,不提供超時重傳等機制,只需要在application中有數據緩存buff,在內核內不需要緩存需要發送的數據,SO_SENDBUF參數調節的只是能發送的最大數據包,如果application發送的數據包大于這個值,則報EMSGSIZE,
TCP 發送緩存
TCP號稱可靠協議,有超時重傳機制,這時內核中需要保存已經發送出去但未收到確認的數據的副本,也就是發送緩存(內核send buffer),其大小有限制,
可以通過:sysctl -a|grep net.ipv4.tcp_wmem 查看,這是測試機的輸出結果,其中4096 是最小值,16384是默認值,4194304是最大值
net.ipv4.tcp_wmem = 4096 16384 4194304
3. TCP MSS
MSS,max segment size
TCP是流式協議,send函數中參數大小理論上是不受限制(受進程空間限制),當發送的數據包大于內核中發送緩存大小時,分多次發送,每次發送MSS(max segment size)大小,
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。