MulticastSocket(group,port) problems with bind() with IPv6 enabled
Pekka Savola
pekkas at netcore.fi
Fri Dec 5 07:58:27 PST 2008
On Fri, 5 Dec 2008, Alan Bateman wrote:
> For the specific problem at hand then I assume that running with
> -Djava.net.preferIPv4Stack=true fixes the problem.
Correct, though that option seems a bit of a misnomer, because it
essentially completely disables IPv6 in Java.
> More generally, it can be hard to develop a portable multicasting
> application. Typically, one binds to the wildcard address and then joins the
> multicast group. This is usually preferable because it is not possible to
> receive multicast datagrams on some systems when bound to a specific local
> address or a multicast address.
Yes, this is often sufficient with very simple apps, or where you run
only one app on a host. But unfortunately often life is a bit more
complex :-(
> The issues with interference that you allude
> to on Linux are indeed a pain. I'm surprised there isn't a parameter or
> option to configure this behavior (Michael might want to jump in here as he
> was researching this specific topic a few months ago). 4701650 also touches
> on this topic.
You may already be aware of the Linux interference issues in depth,
but let me add a couple of references for the record:
Linux netdev posting where in the followups there is extensive has
discussion why it's implemented this way (different than in windows
for example), and why it isn't changing:
http://marc.info/?l=linux-netdev&m=121579002105636&w=2
Bug #6579726 describes this "cross traffic" API issue on Linux. This
has resulted in a number of bug/doc reports and workarounds in some
Java programs:
http://www.jboss.org/community/docs/DOC-11710
http://www.jboss.org/community/docs/DOC-9469
https://jira.jboss.org/jira/browse/JGRP-777
> As regards the suggestion to choose the protocol family at creation time -
> some of that is already in place for jdk7 as it was needed to add multicast
> support to NIO (and specifically because it is not portable to join IPv4
> multicast groups with an IPv6 socket). When creating a DatagramChannel you
> can specify the protocol family and this should correspond to the address
> type of the multicast groups that you join. Classic networking needs a bit of
> work to allow mixing of IPv4 and IPv6 sockets in the same VM. Chris or
> Michael might want to say more about that.
It's great to hear there will be improvements in this area.
--
Pekka Savola "You each name yourselves king, yet the
Netcore Oy kingdom bleeds."
Systems. Networks. Security. -- George R.R. Martin: A Clash of Kings
More information about the net-dev
mailing list