1. 程式人生 > >Linux C++ 傳送不了大檔案之解決辦法

Linux C++ 傳送不了大檔案之解決辦法

       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