Hi Oliver, On 01/31/13 13:26, Oliver Lehmann wrote:
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
I can confirm this is a problem for bsd-port (openjdk7) on OpenBSD too.
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 ;)