An object of type basic_endpoint<InternetProtocol> represents a protocol-specific endpoint, where an endpoint consists of an IP address and port number. Endpoints may be used to identify sources and destinations for socket connections and datagrams.
namespace std { namespace experimental { namespace net { inline namespace v1 { namespace ip { template<class InternetProtocol> class basic_endpoint { public: // types: using protocol_type = InternetProtocol; // [internet.endpoint.cons], constructors: constexpr basic_endpoint() noexcept; constexpr basic_endpoint(const protocol_type& proto, port_type port_num) noexcept; constexpr basic_endpoint(const ip::address& addr, port_type port_num) noexcept; // [internet.endpoint.members], members: constexpr protocol_type protocol() const noexcept; constexpr ip::address address() const noexcept; void address(const ip::address& addr) noexcept; constexpr port_type port() const noexcept; void port(port_type port_num) noexcept; }; // [internet.endpoint.comparisons], basic_endpoint comparisons: template<class InternetProtocol> constexpr bool operator==(const basic_endpoint<InternetProtocol>& a, const basic_endpoint<InternetProtocol>& b) noexcept; template<class InternetProtocol> constexpr bool operator!=(const basic_endpoint<InternetProtocol>& a, const basic_endpoint<InternetProtocol>& b) noexcept; template<class InternetProtocol> constexpr bool operator< (const basic_endpoint<InternetProtocol>& a, const basic_endpoint<InternetProtocol>& b) noexcept; template<class InternetProtocol> constexpr bool operator> (const basic_endpoint<InternetProtocol>& a, const basic_endpoint<InternetProtocol>& b) noexcept; template<class InternetProtocol> constexpr bool operator<=(const basic_endpoint<InternetProtocol>& a, const basic_endpoint<InternetProtocol>& b) noexcept; template<class InternetProtocol> constexpr bool operator>=(const basic_endpoint<InternetProtocol>& a, const basic_endpoint<InternetProtocol>& b) noexcept; // [internet.endpoint.io], basic_endpoint I/O: template<class CharT, class Traits, class InternetProtocol> basic_ostream<CharT, Traits>& operator<<( basic_ostream<CharT, Traits>& os, const basic_endpoint<InternetProtocol>& ep); } // namespace ip } // inline namespace v1 } // namespace net } // namespace experimental } // namespace std
Instances of the basic_endpoint class template meet the requirements for an Endpoint ([socket.reqmts.endpoint]).
Extensible implementations provide the following member functions:
namespace std { namespace experimental { namespace net { inline namespace v1 { namespace ip { template<class InternetProtocol> class basic_endpoint { public: void* data() noexcept; const void* data() const noexcept; constexpr size_t size() const noexcept; void resize(size_t s); constexpr size_t capacity() const noexcept; // remainder unchanged private: union { sockaddr_in v4_; sockaddr_in6 v6_; } data_; // exposition only }; } // namespace ip } // inline namespace v1 } // namespace net } // namespace experimental } // namespace std
constexpr basic_endpoint() noexcept;
Postconditions: this->address() == ip::address() and port() == 0.
constexpr basic_endpoint(const protocol_type& proto,
port_type port_num) noexcept;
Requires: proto == protocol_type::v4() || proto == protocol_type::v6().
constexpr basic_endpoint(const ip::address& addr,
port_type port_num) noexcept;
Postconditions: this->address() == addr and port() == port_num.
constexpr protocol_type protocol() const noexcept;
Returns: protocol_type::v6() if the expression this->address().is_v6() is true, otherwise protocol_type::v4().
constexpr ip::address address() const noexcept;
Returns: The address associated with the endpoint.
void address(const ip::address& addr) noexcept;
Postconditions: this->address() == addr.
constexpr port_type port() const noexcept;
Returns: The port number associated with the endpoint.
void port(port_type port_num) noexcept;
Postconditions: port() == port_num.
template<class InternetProtocol>
constexpr bool operator==(const basic_endpoint<InternetProtocol>& a,
const basic_endpoint<InternetProtocol>& b) noexcept;
Returns: a.address() == b.address() && a.port() == b.port()).
template<class InternetProtocol>
constexpr bool operator!=(const basic_endpoint<InternetProtocol>& a,
const basic_endpoint<InternetProtocol>& b) noexcept;
Returns: !(a == b).
template<class InternetProtocol>
constexpr bool operator< (const basic_endpoint<InternetProtocol>& a,
const basic_endpoint<InternetProtocol>& b) noexcept;
Returns: tie(a.address(), a.port()) < tie(b.address(), b.port()).
template<class InternetProtocol>
constexpr bool operator> (const basic_endpoint<InternetProtocol>& a,
const basic_endpoint<InternetProtocol>& b) noexcept;
Returns: b < a.
template<class InternetProtocol>
constexpr bool operator<=(const basic_endpoint<InternetProtocol>& a,
const basic_endpoint<InternetProtocol>& b) noexcept;
Returns: !(b < a).
template<class InternetProtocol>
constexpr bool operator>=(const basic_endpoint<InternetProtocol>& a,
const basic_endpoint<InternetProtocol>& b) noexcept;
Returns: !(a < b).
template<class CharT, class Traits, class InternetProtocol>
basic_ostream<CharT, Traits>& operator<<(
basic_ostream<CharT, Traits>& os,
const basic_endpoint<InternetProtocol>& ep);
Effects: Outputs a representation of the endpoint to the stream, as if it were implemented as follows:
basic_ostringstream<CharT, Traits> ss; if (ep.protocol() == basic_endpoint<InternetProtocol>::protocol_type::v6()) ss << "[" << ep.address() << "]"; else ss << ep.address(); ss << ":" << ep.port(); os << ss.str();
Returns: os.
[ Note: The representation of the endpoint when it contains an IP version 6 address is based on [RFC2732]. — end note ]
void* data() noexcept;
Returns: addressof(data_).
const void* data() const noexcept;
Returns: addressof(data_).
constexpr size_t size() const noexcept;
Returns: sizeof(sockaddr_in6) if protocol().family() == AF_INET6, otherwise sizeof(sockaddr_in).
void resize(size_t s);
constexpr size_t capacity() const noexcept;
Returns: sizeof(data_).