Java 更改要加入DatagramChannel的多播组的限制?

Java 更改要加入DatagramChannel的多播组的限制?,java,sockets,buffer,nio,Java,Sockets,Buffer,Nio,MyDatagramChannel无法加入超过20个多播组。它在第21次尝试时抛出java.net.SocketException:No buffer space available异常 我的代码: DatagramChannel channel = DatagramChannel.open(StandardProtocolFamily.INET); channel.setOption(StandardSocketOptions.IP_MULTICAST_LOOP, false); channe

My
DatagramChannel
无法加入超过20个多播组。它在第21次尝试时抛出
java.net.SocketException:No buffer space available
异常

我的代码:

DatagramChannel channel = DatagramChannel.open(StandardProtocolFamily.INET);
channel.setOption(StandardSocketOptions.IP_MULTICAST_LOOP, false);
channel.setOption(StandardSocketOptions.IP_MULTICAST_TTL, 16);
channel.setOption(StandardSocketOptions.SO_REUSEADDR, true).bind(new InetSocketAddress(50051));
channel.configureBlocking(false);
            
NetworkInterface ni = getNetworkInterface("my_ni");
    
for (int i = 1; i < 200; i+=2) {
     InetAddress groupToListen = InetAddress.getByName("xxx.xxx.x." + i);
     channel.join(groupToListen, ni);
     System.out.println("Joined: " + groupToListen.toString());
}
但这没用。是的,我看到缓冲区大小增加了,但我能够加入的组数保持不变

该限制适用于每个进程,因此,如果我启动上述测试应用程序的10个实例,使其加入的组不超过20个,则在每种情况下都可以

有什么建议可以提高这个限额吗?
提前谢谢你

如果将来有人需要:

这是
/proc/sys/net/ipv4/igmp_max_成员身份可调的。
我有一个默认值20-完全匹配我能够加入的组的数量

增加此参数可解决此问题

channel.setOption(StandardSocketOptions.SO_RCVBUF, Integer.MAX_VALUE);
channel.setOption(StandardSocketOptions.SO_SNDBUF, Integer.MAX_VALUE);