Multicast socket behaviour?

From: Daniel Ng
Date: Wed Aug 13 2008 - 03:40:30 EST


Hi,

The below C code registers the socket with the multicast group 'HELLO_GROUP':

mreq.imr_multiaddr.s_addr=inet_addr(HELLO_GROUP);
mreq.imr_address.s_addr=htonl(INADDR_ANY);

mreq.imr_ifindex = if_nametoindex("ppp1");

if (setsockopt(fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq)) < 0) {
perror("setsockopt");
exit(1);
}

I understand that if 'INADDR_ANY' is used, it is up to the kernel to decide
what action to take.

>From my experiments, it seems that the interface corresponding to the
highest '224.0.0.0' entry in the routing table is used.

Would someone please explain why this is so?

How difficult would it be to have the kernel join the HELLO_GROUP on *all*
available multicast-capable interfaces? Why isn't this currently implemented?

I'm using 2.6.14.

Cheers,
Daniel


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/