diff --git a/Net/include/Poco/Net/NetException.h b/Net/include/Poco/Net/NetException.h index 770846d05..f4480e12a 100644 --- a/Net/include/Poco/Net/NetException.h +++ b/Net/include/Poco/Net/NetException.h @@ -71,6 +71,7 @@ POCO_DECLARE_EXCEPTION(Net_API, POP3Exception, NetException) POCO_DECLARE_EXCEPTION(Net_API, ICMPException, NetException) POCO_DECLARE_EXCEPTION(Net_API, HTMLFormException, NetException) POCO_DECLARE_EXCEPTION(Net_API, WebSocketException, NetException) +POCO_DECLARE_EXCEPTION(Net_API, UnsupportedFamilyException, NetException) } } // namespace Poco::Net diff --git a/Net/src/MulticastSocket.cpp b/Net/src/MulticastSocket.cpp index e6589c677..b94d0eaaa 100644 --- a/Net/src/MulticastSocket.cpp +++ b/Net/src/MulticastSocket.cpp @@ -97,16 +97,18 @@ MulticastSocket& MulticastSocket::operator = (const Socket& socket) void MulticastSocket::setInterface(const NetworkInterface& interfc) { - if (!interfc.supportsIPv6()) + if (address().family() == IPAddress::IPv4) { impl()->setOption(IPPROTO_IP, IP_MULTICAST_IF, interfc.firstAddress(IPAddress::IPv4)); } - else - { #if defined(POCO_HAVE_IPv6) + else if (address().family() == IPAddress::IPv6) + { impl()->setOption(IPPROTO_IPV6, IPV6_MULTICAST_IF, interfc.index()); -#endif } +#endif + else + throw UnsupportedFamilyException("Unknown or unsupported socket family."); } diff --git a/Net/src/NetException.cpp b/Net/src/NetException.cpp index b6174e964..29299870c 100644 --- a/Net/src/NetException.cpp +++ b/Net/src/NetException.cpp @@ -68,6 +68,7 @@ POCO_IMPLEMENT_EXCEPTION(POP3Exception, NetException, "POP3 Exception") POCO_IMPLEMENT_EXCEPTION(ICMPException, NetException, "ICMP Exception") POCO_IMPLEMENT_EXCEPTION(HTMLFormException, NetException, "HTML Form Exception") POCO_IMPLEMENT_EXCEPTION(WebSocketException, NetException, "WebSocket Exception") +POCO_IMPLEMENT_EXCEPTION(UnsupportedFamilyException, NetException, "Unknown or unsupported socket family.") } } // namespace Poco::Net