Linux C++ 发送不了大文件之解决办法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sz76211822/article/details/84581939

       window中,socket send()函数可发6M一张的图片,可是同样的代码移植到Linux中就出问题,原因是这个的默认buffer不一样。

一、说明

以下是Linxu中的socket的相关信息:
1、从socket里一次最大读取字节数取决于接收buffer的大小,亦即socket的SO_RCVBUF对应的数值的2倍,这个2倍关系是内核决定的。
2、所以关键在于SO_RCVBUF的大小了。SO_RCVBUF大小,每个系统可能不一样,比如我使用linux,rmem_max存储了它的最大值:
[root@localhost 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

猜你喜欢

转载自blog.csdn.net/sz76211822/article/details/84581939
今日推荐