This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug libgcj/13288] MulticastSocket not joining more than one interface
- From: "BenGardiner at nanometrics dot ca" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 29 Oct 2007 20:43:00 -0000
- Subject: [Bug libgcj/13288] MulticastSocket not joining more than one interface
- References: <bug-13288-6895@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #2 from BenGardiner at nanometrics dot ca 2007-10-29 20:43 -------
Created an attachment (id=14436)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=14436&action=view)
a patch for libjava/gnu/java/net/natPlainDatagramSocketImplPosix.cc to use the
given NetworkInterface* in the IP_ADD_MEMBERSHIP sockopt call.
Created for gcc 4.0.1's libjava; noticed that the file in trunk still has the
FIXME.
The change affects how multicast join/leave is implemented: if the
NetworkInterface* passed in the arguments is null, then the behaviour is the
same as the previous. That is, put the INADDR_ANY value into the ip_mreq
structure and pass it to the kernel (on linux 2.4.24 this ends up always
referring to the default gateway interface); otherwise, create a ip_mreq
structure for each address owned by the NetworkInterface and pass it to the
kernel.
For linux it is a little overkill to do an IP_ADD_MEMBERSHIP call for each
address owned by the network interface, since they will each get mapped back
into the interface inside the kernel. It seemed that since the ip_mreq (mostly
standard) structure contained no field for a specific interface, the mostly
standard thing to do would be to do an _ADD_ for each address. If this is not
needed to accomodate all unices (something Im not qualified to decide) the
method could always do what is done in the openJDK: do an _ADD_ for the first
interface address owned by the NetworkInterface.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13288