X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FProtocols%2FINet%2FMulticastSocketProtocol.cc;h=e37108f943388aa049f9d9a24e6dbd74e5cb36e4;hb=5443435c4c2b6e4386c5334b5b8358273f2bae93;hp=b83314496c19d0ae708b8adf02065567894fd235;hpb=6fe5e7e732ecb03e10c9bb430883d72d9cf0a86c;p=senf.git diff --git a/Socket/Protocols/INet/MulticastSocketProtocol.cc b/Socket/Protocols/INet/MulticastSocketProtocol.cc index b833144..e37108f 100644 --- a/Socket/Protocols/INet/MulticastSocketProtocol.cc +++ b/Socket/Protocols/INet/MulticastSocketProtocol.cc @@ -79,7 +79,7 @@ prefix_ void senf::MulticastSocketProtocol::mcIface(std::string const & iface) const { struct ip_mreqn mreqn; - ::memset(&mreqn,sizeof(mreqn),0); + ::memset(&mreqn, 0, sizeof(mreqn)); if (!iface.empty()) { mreqn.imr_ifindex = if_nametoindex(iface.c_str()); if (mreqn.imr_ifindex == 0) @@ -242,6 +242,7 @@ prefix_ void senf::INet6MulticastSocketProtocol::mcAddMembership(INet6Address co prefix_ void senf::INet6MulticastSocketProtocol::mcAddMembership(INet6Address const & mcAddr, std::string const & iface) + const { if (mcAddr.inet4Mapped()) { struct ip_mreqn mreqn; @@ -311,28 +312,33 @@ senf::INet6MulticastSocketProtocol::mcDropMembership(INet6Address const & mcAddr } namespace { -void mc6SSMSourceRequest(int operation, int fd, senf::INet6Address const & group, - senf::INet6Address const & source, int const & ifacei) -{ - struct group_source_req req; - ::memset(&req, 0, sizeof(req)); - req.gsr_interface = ifacei; - req.gsr_group.ss_family = AF_INET6; - std::copy(group.begin(), group.end(), - reinterpret_cast(req.gsr_group).sin6_addr.s6_addr); - req.gsr_source.ss_family = AF_INET6; - std::copy(source.begin(), source.end(), - reinterpret_cast(req.gsr_source).sin6_addr.s6_addr); - if (::setsockopt(fd, SOL_IPV6, MCAST_JOIN_SOURCE_GROUP, &req, sizeof(req)) < 0) - SENF_THROW_SYSTEM_EXCEPTION("::setsockopt()"); -} -void mc6SSMSourceRequest(int operation, int fd, senf::INet6Address const & group, - senf::INet6Address const & source, std::string const & iface) -{ - int ifacei = if_nametoindex(iface.c_str()); - if (ifacei == 0) - throw senf::SystemException("::if_nametoindex()", ENOENT SENF_EXC_DEBUGINFO); - mc6SSMSourceRequest(operation, fd, group, source, ifacei); + + void mc6SSMSourceRequest(int operation, int fd, senf::INet6Address const & group, + senf::INet6Address const & source, int ifacei) + { + struct group_source_req req; + ::memset(&req, 0, sizeof(req)); + req.gsr_interface = ifacei; + req.gsr_group.ss_family = AF_INET6; + std::copy(group.begin(), group.end(), + reinterpret_cast(req.gsr_group).sin6_addr.s6_addr); + req.gsr_source.ss_family = AF_INET6; + std::copy(source.begin(), source.end(), + reinterpret_cast(req.gsr_source).sin6_addr.s6_addr); + if (::setsockopt(fd, SOL_IPV6, MCAST_JOIN_SOURCE_GROUP, &req, sizeof(req)) < 0) + SENF_THROW_SYSTEM_EXCEPTION("::setsockopt()"); + } + + void mc6SSMSourceRequest(int operation, int fd, senf::INet6Address const & group, + senf::INet6Address const & source, std::string const & iface) + { + int ifacei (0); + if (! iface.empty()) { + ifacei = if_nametoindex(iface.c_str()); + if (ifacei == 0) + throw senf::SystemException("::if_nametoindex()", ENOENT SENF_EXC_DEBUGINFO); + } + mc6SSMSourceRequest(operation, fd, group, source, ifacei); } } @@ -352,12 +358,6 @@ prefix_ void senf::INet6MulticastSocketProtocol::mcJoinSSMSource(INet6Address co { mc6SSMSourceRequest(MCAST_JOIN_SOURCE_GROUP, fd(), group, source, ifacei); } -prefix_ void senf::INet6MulticastSocketProtocol::mcJoinSSMSource(INet6Address const & group, - INet6Address const & source) - const -{ - mc6SSMSourceRequest(MCAST_JOIN_SOURCE_GROUP, fd(), group, source, 0); -} prefix_ void senf::INet6MulticastSocketProtocol::mcLeaveSSMSource(INet6Address const & group, INet6Address const & source, @@ -372,7 +372,7 @@ prefix_ void senf::INet6MulticastSocketProtocol::mcLeaveSSMSource(INet6Address c #undef prefix_ //#include "MulticastSocketProtocol.mpp" - + // Local Variables: // mode: c++ // fill-column: 100