版权声明:本文为博主原创文章,未经博主允许不得转载。 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