src/java.management/share/classes/sun/management/jdp/JdpBroadcaster.java

Print this page

        

*** 33,42 **** --- 33,43 ---- import java.net.StandardProtocolFamily; import java.net.StandardSocketOptions; import java.nio.ByteBuffer; import java.nio.channels.DatagramChannel; import java.nio.channels.UnsupportedAddressTypeException; + import java.util.Enumeration; /** * JdpBroadcaster is responsible for sending pre-built JDP packet across a Net * * <p> Multicast group address, port number and ttl have to be chosen on upper
*** 77,93 **** --- 78,131 ---- // with srcAddress equal to null, this constructor do exactly the same as // if srcAddress is not passed if (srcAddress != null) { // User requests particular interface to bind to NetworkInterface interf = NetworkInterface.getByInetAddress(srcAddress); + + if (interf == null) { + throw new JdpException("Unable to get network interface for " + srcAddress.toString()); + } + + if (!interf.isUp()) { + throw new JdpException(interf.getName() + " is not up."); + } + + if (!interf.supportsMulticast()) { + throw new JdpException(interf.getName() + " does not support multicast."); + } + try { channel.bind(new InetSocketAddress(srcAddress, 0)); } catch (UnsupportedAddressTypeException ex) { throw new JdpException("Unable to bind to source address"); } channel.setOption(StandardSocketOptions.IP_MULTICAST_IF, interf); } + else { + Enumeration<NetworkInterface> nics = NetworkInterface.getNetworkInterfaces(); + boolean succeed = false; + + while (nics.hasMoreElements()) { + NetworkInterface nic = nics.nextElement(); + + if (nic.isUp() && nic.supportsMulticast()) { + try { + channel.setOption(StandardSocketOptions.IP_MULTICAST_IF, nic); + succeed = true; + } catch (IOException ex) { + // pass + } + } + + if (!succeed) { + throw new JdpException("Unable to bind to any interfaces."); + } + + } + + } + } /** * Create a new broadcaster *