Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 1 Feb 2013 12:59:52 -0500
From:      Kurt Miller <kurt@intricatesoftware.com>
To:        bsd-port-dev@openjdk.java.net
Cc:        java@freebsd.org, Oliver Lehmann <lehmann@ans-netz.de>
Subject:   Re: MulticastSocket problem on FreeBSD
Message-ID:  <201302011259.53214.kurt@intricatesoftware.com>
In-Reply-To: <20130201090319.Horde.UUrN0L_jSn_qp6MZj0-Wig1@avocado.salatschuessel.net>
References:  <20130131192629.Horde.ZGX-g9D9tu8aDwt6XwEMuw5@avocado.salatschuessel.net> <510B378A.8090603@intricatesoftware.com> <20130201090319.Horde.UUrN0L_jSn_qp6MZj0-Wig1@avocado.salatschuessel.net>

next in thread | previous in thread | raw e-mail | index | archive | help
--Boundary-00=_ZKADRynliH8KyFM
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Hi Oliver,

On Friday 01 February 2013 03:03:19 am Oliver Lehmann wrote:
> 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)

Right those parts are already there.

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

The last chunk of the diff is not needed for this problem and is
incomplete. It is for the problem described here:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7144274
http://hg.openjdk.java.net/bsd-port/bsd-port/jdk/rev/99cc5c9ef200

I have not yet checked to see if we need this fix in addition to
the problem you noted. However, if we do need it then we to
change MACOSX to _ALLBSD_SOURCE in both
PlainDatagramSocketImpl.c mcast_join_leave() and
net_util_md.c setDefaultScopeID()

I am attaching patches for both openjdk6 and openjdk7
that should fix the problem you initially reported and will apply to
FreeBSD's ports cleanly.

Thanks for reporting the problem and tracking the correction down.

-Kurt

> root@bigoli test> /usr/local/bootstrap-openjdk/bin/javac test.java
> root@bigoli test> /usr/local/bootstrap-openjdk/bin/jar -cf test.jar Main.class
> root@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@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 ;)
> >>
> >>
> 
> 
> 



--Boundary-00=_ZKADRynliH8KyFM--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201302011259.53214.kurt>