1

我正在尝试将 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;
4

1 回答 1

3

以下是man 7 socket关于 SO_RCVBUF 选项的内容:

SO_RCVBUF

设置或获取最大套接字接收缓冲区(以字节为单位)。 当使用 setsockopt(2) 设置该值时,内核将该值加倍(以便为簿记开销留出空间),并且该加倍值由 getsockopt(2) 返回。默认值由 /proc/sys/net/core/rmem_default 文件设置,最大允许值由 /proc/sys/net/core/rmem_max 文件设置。此选项的最小(加倍)值为 256。

于 2012-08-06T12:01:25.910 回答