diff -Nur src/Ice/Network.cpp src/Ice/Network.cpp --- src/Ice/Network.cpp 2006-06-29 00:52:03.000000000 +0200 +++ src/Ice/Network.cpp 2007-01-19 20:48:20.000000000 +0100 @@ -477,6 +477,21 @@ throw ex; } + if (IN_CLASSD(ntohl(addr.sin_addr.s_addr))) + { + struct ip_mreq mr; + + mr.imr_multiaddr = addr.sin_addr; + mr.imr_interface.s_addr = INADDR_ANY; + if (setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mr, sizeof(mr)) == SOCKET_ERROR) + { + closeSocketNoThrow(fd); + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } + } + socklen_t len = static_cast(sizeof(addr)); #ifdef NDEBUG getsockname(fd, reinterpret_cast(&addr), &len);