在Linux(Ubuntu / x64)上,我已验证最大SO_RCVBUF
是
~$ cat /proc/sys/net/core/rmem_max
212992
但是,当我在默认套接字以下运行代码时,接收大小为530904
。
SocketChannel ss = SocketChannel.open(new InetSocketAddress("localhost", 9876));
ss.configureBlocking(false);
//ss.socket().setReceiveBufferSize(10*1024*1024);
System.out.println("Receive size:"+ ss.socket().getReceiveBufferSize());
奇怪的是,如果我取消注释输出上方的setReceiveBufferSize
行,则更改为
Receive size:212992
即JVM默认接收大小大于系统最大值,但不允许我将大小设置为大于最大值。
有人知道这是怎么回事吗?