Just FYI on multicast/unicast taken from Stevens book:
"...Some applications also bind the multicast address to the socket, in addition to the port. This prevents any other datagrams that might be received for that port from being delivered to the socket.
Historically, Berkeley-derived implementations only require that some socketon the host join the mcast group, not necessarily the socket that binds the port and then receives the mcast datagram. There is a potential, however, with these implementations for mcast datagrams to be delivered to the applications that are not mcast aware. Newer mcast kernels now require that the process bind the port and set any mcast socket option for the socket, the latter being an indication that the application is mcast aware. Solaris 2.5 differs slightly and only delivers received mcast datagrams to a socket that has both joined the group and bound the port. For portability, all mcast apps should join a group and bind the port. Some older mcast-capable hosts do not allow the bind of mcast addr to a socket. For portability an application may wish to ignore a bind error for a mcast address...."
----rrp