我试图将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。

09-27 20:57