我正在尝试将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;
答案 0 :(得分:2)
以下是man 7 socket
中有关SO_RCVBUF选项的内容:
SO_RCVBUF
以字节为单位设置或获取最大套接字接收缓冲区。 内核将此值加倍(以便为记账留出空间 使用setsockopt(2)设置它时,这个加倍值 由getsockopt(2)返回。默认值由 / proc / sys / net / core / rmem_default文件,允许的最大值为 由/ proc / sys / net / core / rmem_max文件设置。最小(加倍) 此选项的值为256。