void NetworkInterfaceTest::testForIndex() { NetworkInterface::Map map = NetworkInterface::map(); for (NetworkInterface::Map::const_iterator it = map.begin(); it != map.end(); ++it) { NetworkInterface ifc = NetworkInterface::forIndex(it->second.index()); assert (ifc.index() == it->second.index()); } }
void MulticastSocket::setInterface(const NetworkInterface& interface) { if (!interface.supportsIPv6()) { impl()->setOption(IPPROTO_IP, IP_MULTICAST_IF, interface.address()); } else { #if defined(POCO_HAVE_IPv6) impl()->setOption(IPPROTO_IPV6, IPV6_MULTICAST_IF, interface.index()); #endif } }
void MulticastSocket::setInterface(const NetworkInterface& interfc) { if (address().family() == IPAddress::IPv4) { impl()->setOption(IPPROTO_IP, IP_MULTICAST_IF, interfc.firstAddress(IPAddress::IPv4)); } #if defined(POCO_HAVE_IPv6) else if (address().family() == IPAddress::IPv6) { impl()->setOption(IPPROTO_IPV6, IPV6_MULTICAST_IF, interfc.index()); } #endif else throw UnsupportedFamilyException("Unknown or unsupported socket family."); }
void MulticastSocket::leaveGroup(const IPAddress& groupAddress, const NetworkInterface& interfc) { if (groupAddress.af() == AF_INET) { struct ip_mreq mr; std::memcpy(&mr.imr_multiaddr, groupAddress.addr(), groupAddress.length()); std::memcpy(&mr.imr_interface, interfc.firstAddress(IPAddress::IPv4).addr(), interfc.firstAddress(IPAddress::IPv4).length()); impl()->setRawOption(IPPROTO_IP, IP_DROP_MEMBERSHIP, &mr, sizeof(mr)); } else { #if defined(POCO_HAVE_IPv6) struct ipv6_mreq mr; std::memcpy(&mr.ipv6mr_multiaddr, groupAddress.addr(), groupAddress.length()); mr.ipv6mr_interface = interfc.index(); impl()->setRawOption(IPPROTO_IPV6, IPV6_DROP_MEMBERSHIP, &mr, sizeof(mr)); #endif } }