On Linux and Solaris platforms, when setting up the main multicast receiver socket, Bela allows binding the socket to its multicast address, like this:
InetAddress group_addr = ...
InetAddress bind_addr = ...
SocketAddress group_sock_addr = new InetSocketAddress(group_addr, port) ;
MulticastSocket s = new MulticastSocket(group_sock_addr) ; // funny
s.joinGroup(group_addr) ;
Binding to the multicast address on Linux and Solaris was done in order to avoid the promiscuous traffic problem. A detailed discussion on the matter can be found in the bugzilla report:https://bugzilla.redhat.com/show_bug.cgi?id=231899.
This works on Linux with IPv4 but is not working on Linux with IPv6 for the multicast-address ff02::1 - an error message is being generated (SocketException, invalid argument) and the code then tries to create the same multicast address in the usual way:
InetAddress group_addr = ...
InetAddress bind_addr = ...
MulticastSocket s = new MulticastSocket(port) ;
s.setInterface(bind_addr) ;
s.joinGroup(group_addr) ;
This is only a problem in that it generates a confusing error message about using mixed IPv4 / IPv6 stacks, but the socket continues to work correctly as far as I can tell.
Haven't confirmed this, but I believe the promiscuous traffic issue does not arise with IPv6 multicast sockets.
- blocks
-
JBPAPP-2006 Binding to mcast address in UDP.java is not working on Linux with IPv6
- Resolved