Linux C++ 傳送不了大檔案之解決辦法
阿新 • • 發佈:2018-12-13
window中,socket send()函式可發6M一張的圖片,可是同樣的程式碼移植到Linux中就出問題,原因是這個的預設buffer不一樣。
一、說明
以下是Linxu中的socket的相關資訊: 1、從socket裡一次最大讀取位元組數取決於接收buffer的大小,亦即socket的SO_RCVBUF對應的數值的2倍,這個2倍關係是核心決定的。 2、所以關鍵在於SO_RCVBUF的大小了。SO_RCVBUF大小,每個系統可能不一樣,比如我使用linux,rmem_max儲存了它的最大值: [[email protected]sockopt]# cat /proc/sys/net/core/rmem_max 124928 3、所以對於我這臺電腦,最大接收buffer是124928*2的大小,也就是說最大允許一次讀取124928*2大小了。
二、解決辦法
vi /etc/profile,在最後輸入
echo 10485760 > /proc/sys/net/core/rmem_max echo 10485760 > /proc/sys/net/core/rmem_default echo 10485760 > /proc/sys/net/core/wmem_max echo 10485760 > /proc/sys/net/core/wmem_default
然後 source /etc/profile