MulticastSocket problem on FreeBSD

Oliver Lehmann lehmann at ans-netz.de
Thu Jan 31 10:26:29 PST 2013


Hi,

I encountered a bug while migrating from FreeBSDs old "Diablo jre"
to openjdk-jre version 6.

I'm running a software using multicast communication and it fails
on FreeBSD when using openjdk6.

example code:

import java.io.IOException;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.SocketException;
import java.net.UnknownHostException;


class Main {
   static String hostname = new String("10.0.1.1");

   public static void main(String args[]) throws
       SocketException, UnknownHostException, IOException{
     InetAddress ia = InetAddress.getByName(hostname);
     MulticastSocket ssdpSocket = new MulticastSocket();

     ssdpSocket.setInterface(ia);

     System.out.println("network interface: " +
          ssdpSocket.getNetworkInterface());
     System.out.println("interface: " + ssdpSocket.getInterface());
   }
}


The output of the old "Diablo JRE" is:

   network interface: name:null index: -1 addresses:
   /10.0.1.1;

   interface: /10.0.1.1


The output of openJDK6 is:

   network interface: name:null
   interface: /0.0.0.0

It always returns this information.
For comparison - openjdk on Linux:

   network interface: name:eth0 (eth0)
   interface: /10.0.1.54

Oracle 7 VM on Windows:

   network interface: name:eth3 (Realtek PCIe GBE Family Controller)
   interface: /10.0.1.51


For me this seems to be an implementation bug of... I don't know?
PlainDatagramSocketImpl.c maybe?

I tried to debug this further, but did not succeeded to find out if
either setInterface() failed to set it correctly, or somewhere in
getInterface() an early return() happens. I tried to remotly debug
this using Eclipse, but only saw the private variables of ssdpSocket
which didn't indicated something obvious. Breakpoints inside
java.net.MulticastSocket would have helped ;)




More information about the bsd-port-dev mailing list