更改多播组的限制以加入 DatagramChannel?
Change the limit of multicast groups to join for DatagramChannel?
我的 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());
}
我尝试增加发送和接收缓冲区:
channel.setOption(StandardSocketOptions.SO_RCVBUF, Integer.MAX_VALUE);
channel.setOption(StandardSocketOptions.SO_SNDBUF, Integer.MAX_VALUE);
但没有用。是的,我看到缓冲区大小已增加 但我能够加入的组数保持不变。
限制适用于每个进程,所以如果我启动上述测试应用程序的 10 个实例,给它加入不超过 20 个组,在每种情况下都可以。
有什么建议可以提高这个限制吗?
提前致谢!
万一以后有人需要这个:
这是 /proc/sys/net/ipv4/igmp_max_memberships
可调参数。
我的默认值为 20 - 与我能够加入的组数完全匹配。
增加这个参数解决了这个问题。
我的 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());
}
我尝试增加发送和接收缓冲区:
channel.setOption(StandardSocketOptions.SO_RCVBUF, Integer.MAX_VALUE);
channel.setOption(StandardSocketOptions.SO_SNDBUF, Integer.MAX_VALUE);
但没有用。是的,我看到缓冲区大小已增加 但我能够加入的组数保持不变。
限制适用于每个进程,所以如果我启动上述测试应用程序的 10 个实例,给它加入不超过 20 个组,在每种情况下都可以。
有什么建议可以提高这个限制吗? 提前致谢!
万一以后有人需要这个:
这是 /proc/sys/net/ipv4/igmp_max_memberships
可调参数。
我的默认值为 20 - 与我能够加入的组数完全匹配。
增加这个参数解决了这个问题。