Java 更改要加入DatagramChannel的多播组的限制?
MyJava 更改要加入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
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);