MulticastSocket problem on FreeBSD

Oliver Lehmann lehmann at ans-netz.de
Fri Feb 1 00:03:19 PST 2013


Hi,

I patched openjdk7. Attached you'll find the patch.
It is now possible (at least for me) to use MulticastSocket.
I know the patch is not ready for checkin, but I guess you'll get
the idea and know how to do it properly as I don't know the correct
defines to check. (The first two chunks in the patch are probably
already in HG as the patch is based on u6 code)

Basically I just replaced the MACOSX check with __FreeBSD__ and
it works now:

root at bigoli test> /usr/local/bootstrap-openjdk/bin/javac test.java
root at bigoli test> /usr/local/bootstrap-openjdk/bin/jar -cf test.jar Main.class
root at bigoli test> /usr/local/openjdk7/bin/java -classpath .:test.jar Main
network interface: name:null
interface: /10.0.1.1

Java is still not able to detect my network interface name, but this
was also not working in Diablo JRE and I don't need it. At least I'm
now getting the correct Multicast Address back (10.0.1.1 and not 0.0.0.0)

Please consider fixing this upstream.

PS: Sorry for top-post but I'm CCing FreeBSDs java@ list


Kurt Miller <kurt at intricatesoftware.com> wrote:

> 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 ;)
>>
>>


-------------- next part --------------
A non-text attachment was scrubbed...
Name: PlainDatagramSocketImpl.c.patch
Type: text/x-java
Size: 2554 bytes
Desc: not available
Url : http://mail.openjdk.java.net/pipermail/bsd-port-dev/attachments/20130201/28aa2a26/PlainDatagramSocketImpl.c.patch 


More information about the bsd-port-dev mailing list