X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FINetProtocol.cc;h=b6685b0e24c884eea4061f6b9a572e0c14630ff1;hb=9a988902090d28007578e93bffd809f6bd913155;hp=7d51f4d01eec2007e15ac7b2d4c1144159dca723;hpb=85ab07d100a382467a42e19d741d403a7a96c951;p=senf.git diff --git a/Socket/INetProtocol.cc b/Socket/INetProtocol.cc index 7d51f4d..b6685b0 100644 --- a/Socket/INetProtocol.cc +++ b/Socket/INetProtocol.cc @@ -29,7 +29,6 @@ // Custom includes #include #include -#include // for if_nametoindex #include "Utils/Exception.hh" //#include "INetProtocol.mpp" @@ -53,100 +52,6 @@ prefix_ void senf::IPv4Protocol::bind(INet4Address const & address) throw SystemException(errno); } -prefix_ bool senf::IPv4Protocol::mcLoop() - const -{ - int value; - socklen_t len (sizeof(value)); - if (::getsockopt(body().fd(),SOL_IP,IP_MULTICAST_LOOP,&value,&len) < 0) - throw SystemException(errno); - return value; -} - -prefix_ void senf::IPv4Protocol::mcLoop(bool value) - const -{ - int ivalue (value); - if (::setsockopt(body().fd(),SOL_IP,IP_MULTICAST_LOOP,&ivalue,sizeof(ivalue)) < 0) - throw SystemException(errno); -} - -prefix_ void senf::IPv4Protocol::mcAddMembership(INet4Address const & mcAddr) - const -{ - struct ip_mreqn mreqn; - mreqn.imr_multiaddr = reinterpret_cast(mcAddr.sockaddr_p())->sin_addr; - mreqn.imr_address.s_addr = htons(INADDR_ANY); - mreqn.imr_ifindex = 0; - if (::setsockopt(body().fd(),SOL_IP,IP_ADD_MEMBERSHIP,&mreqn,sizeof(mreqn)) < 0) - throw SystemException(errno); -} - -prefix_ void senf::IPv4Protocol::mcAddMembership(INet4Address const & mcAddr, - INet4Address const & localAddr) - const -{ - struct ip_mreqn mreqn; - mreqn.imr_multiaddr = reinterpret_cast(mcAddr.sockaddr_p())->sin_addr; - mreqn.imr_address = reinterpret_cast(localAddr.sockaddr_p())->sin_addr; - mreqn.imr_ifindex = 0; - if (::setsockopt(body().fd(),SOL_IP,IP_ADD_MEMBERSHIP,&mreqn,sizeof(mreqn)) < 0) - throw SystemException(errno); -} - -prefix_ void senf::IPv4Protocol::mcDropMembership(INet4Address const & mcAddr) - const -{ - struct ip_mreqn mreqn; - mreqn.imr_multiaddr = reinterpret_cast(mcAddr.sockaddr_p())->sin_addr; - mreqn.imr_address.s_addr = htons(INADDR_ANY); - mreqn.imr_ifindex = 0; - if (::setsockopt(body().fd(),SOL_IP,IP_DROP_MEMBERSHIP,&mreqn,sizeof(mreqn)) < 0) - throw SystemException(errno); -} - -prefix_ void senf::IPv4Protocol::mcDropMembership(INet4Address const & mcAddr, - INet4Address const & localAddr) - const -{ - struct ip_mreqn mreqn; - mreqn.imr_multiaddr = reinterpret_cast(mcAddr.sockaddr_p())->sin_addr; - mreqn.imr_address = reinterpret_cast(localAddr.sockaddr_p())->sin_addr; - mreqn.imr_ifindex = 0; - if (::setsockopt(body().fd(),SOL_IP,IP_DROP_MEMBERSHIP,&mreqn,sizeof(mreqn)) < 0) - throw SystemException(errno); -} - -prefix_ void senf::IPv4Protocol::mcIface(std::string iface) - const -{ - struct ip_mreqn mreqn; - ::memset(&mreqn,sizeof(mreqn),0); - if (!iface.empty()) { - mreqn.imr_ifindex = if_nametoindex(iface.c_str()); - if (mreqn.imr_ifindex == 0) - throw SystemException(EINVAL); - } - if (::setsockopt(body().fd(),SOL_IP,IP_MULTICAST_IF,&mreqn,sizeof(mreqn)) < 0) - throw SystemException(errno); -} - -prefix_ unsigned senf::IPv4Protocol::mcTTL() - const -{ - int value; - socklen_t len (sizeof(value)); - if (::getsockopt(body().fd(),SOL_IP,IP_MULTICAST_TTL,&value,&len) < 0) - throw SystemException(errno); - return value; -} - -prefix_ void senf::IPv4Protocol::mcTTL(unsigned value) - const -{ - if (::setsockopt(body().fd(),SOL_IP,IP_MULTICAST_TTL,&value,sizeof(value)) < 0) - throw SystemException(errno); -} /////////////////////////////////////////////////////////////////////////// // senf::IPv6Protocol