Getsockopt 在做一个集合后SO_RECVBUF在 Linux 中显示的值是原来的两倍



当用SO_RECVBUF调用setsockopt,然后转身用SO_RECVBUF调用getsockopt时,它似乎告诉我它将缓冲区大小设置为我请求设置的两倍。 有人知道为什么会这样吗?

有问题的代码:

https://gist.github.com/rdp/8443238

输出:

setting it as 2222
[udp @ 0x1a72ec0] end receive buffer size reported is 4444

只有在 linux 中,在其他操作系统上似乎将其报告为我设置的值。谢谢。

套接字的 Linux 手册页摘录

SO_SNDBUF

设置或获取最大套接字发送缓冲区(以字节为单位)。内核 将此值加倍(以留出空间用于簿记开销) 使用 setsockopt(2) 设置,此双倍值由下式返回 Getsockopt(2).默认值由 /proc/sys/net/core/wmem_default 文件,允许的最大值为 由/proc/sys/net/core/wmem_max 文件设置。最小值(双倍) 此选项的值为 2048。

因此,内核将您为其内部目的设置的值加倍。

平台可以向上或向下调整您提供的值。请参见手册页。您低于平台最低要求。

2222太低了。它应该更像 32k。

相关内容

  • 没有找到相关文章

最新更新