X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FINetProtocol.cc;h=b6685b0e24c884eea4061f6b9a572e0c14630ff1;hb=9a988902090d28007578e93bffd809f6bd913155;hp=ca93fa954e167082f3f355bb6c3836d78987eacf;hpb=9ca82f3198ce01fa2daf50aa8f46e0eb630d275c;p=senf.git diff --git a/Socket/INetProtocol.cc b/Socket/INetProtocol.cc index ca93fa9..b6685b0 100644 --- a/Socket/INetProtocol.cc +++ b/Socket/INetProtocol.cc @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2006 +// Copyright (C) 2006 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) // Kompetenzzentrum fuer Satelitenkommunikation (SatCom) // Stefan Bund @@ -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 @@ -172,5 +77,8 @@ prefix_ void senf::IPv6Protocol::bind(INet6SocketAddress const & address) // Local Variables: // mode: c++ +// fill-column: 100 // c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" // End: