我试图将rcvbuf设置为1MB//1048576,但是在设置了这个值之后,当我试图通过getsockopt读取它时,它总是给出值2mB//2097152
有谁能告诉我下面的代码有什么问题吗?
unsigned int rcvBuf = getRcvBufValue();
if (setsockopt (channelfd, SOL_SOCKET, SO_RCVBUF, &rcvBuf,sizeof (rcvBuf)) == -1)
{
cout<<"RCV BUF IS NOT SET";
}
int rcvbuf = -1;
socklen_t Rsize = sizeof(rcvbuf);
getsockopt (channelfd, SOL_SOCKET, SO_RCVBUF,&rcvbuf,&Rsize);
cout<<rcvbuf;
最佳答案
以下是man 7 socket
中关于so rcvbuf选项的说明:
所以
设置或获取以字节为单位的最大套接字接收缓冲区。
内核将此值加倍(以留出记帐空间
开销)使用setsockopt(2)设置时,此值加倍
由getsockopt(2)返回。默认值由
/PRO/Sys/NET/Cyr/RMMEMY默认文件,最大允许值为
由/proc/sys/net/core/rmem_max文件设置。最小值(加倍)
此选项的值为256。