The outbound_interface class represents a socket option that specifies the network interface to use for outgoing multicast datagrams.
namespace std { namespace experimental { namespace net { inline namespace v1 { namespace ip { namespace multicast { class outbound_interface { public: // constructors: explicit outbound_interface(const address_v4& network_interface) noexcept; explicit outbound_interface(unsigned int network_interface) noexcept; }; } // namespace multicast } // namespace ip } // inline namespace v1 } // namespace net } // namespace experimental } // namespace std
outbound_interface satisfies the requirements for Destructible (C++ 2014 [destructible]), CopyConstructible (C++ 2014 [copyconstructible]), CopyAssignable (C++ 2014 [copyassignable]), and SettableSocketOption ([socket.reqmts.settablesocketoption]).
Extensible implementations provide the following member functions:
namespace std { namespace experimental { namespace net { inline namespace v1 { namespace ip { namespace multicast { class outbound_interface { public: template<class Protocol> int level(const Protocol& p) const noexcept; template<class Protocol> int name(const Protocol& p) const noexcept; template<class Protocol> const void* data(const Protocol& p) const noexcept; template<class Protocol> size_t size(const Protocol& p) const noexcept; // remainder unchanged private: in_addr v4_value_; // exposition only unsigned int v6_value_; // exposition only }; } // namespace multicast } // namespace ip } // inline namespace v1 } // namespace net } // namespace experimental } // namespace std
explicit outbound_interface(const address_v4& network_interface) noexcept;
Effects: For extensible implementations, v4_value_ is initialized to correspond to the IPv4 address network_interface, and v6_value_ is zero-initialized.
explicit outbound_interface(unsigned int network_interface) noexcept;
Effects: For extensible implementations, v6_value_ is initialized to network_interface, and v4_value_ is zero-initialized.
template<class Protocol> int level(const Protocol& p) const noexcept;
Returns: IPPROTO_IPV6 if p.family() == AF_INET6, otherwise IPPROTO_IP.
template<class Protocol> int name(const Protocol& p) const noexcept;
Returns: IPV6_MULTICAST_IF if p.family() == AF_INET6, otherwise IP_MULTICAST_IF.
template<class Protocol> const void* data(const Protocol& p) const noexcept;
Returns: addressof(v6_value_) if p.family() == AF_INET6, otherwise addressof(v4_value_).
template<class Protocol> size_t size(const Protocol& p) const noexcept;
Returns: sizeof(v6_value_) if p.family() == AF_INET6, otherwise sizeof(v4_value_).