目前我遇到了一个严格限制为130688字节的硬性限制。如果我尝试发送任何一条更大的消息,我会收到一个ENOBUFS
错误。
我已经检查了net.core.rmem_default
、net.core.wmem_default
、net.core.rmem_max
、net.core.wmem_max
和net.unix.max_dgram_qlen
系统控制选项,并将它们全部增加了,但是它们没有任何效果,因为这些选项处理的是总缓冲区大小而不是消息大小。
我还设置了SO_SNDBUF
和SO_RCVBUF
套接字选项,但这与上述问题相同。默认的套接字缓冲区大小是基于默认套接字选项设置的。
我查看了ENOBUFS
在套接字栈中返回的内核源代码,但我不清楚它来自哪里。似乎唯一返回这个错误的地方与无法分配内存有关。
最大大小是否实际上是130688?如果不是,可以在不重新编译内核的情况下更改吗?