21 Internet protocol [internet]

21.20 Class ip::udp [internet.udp]

The class udp encapsulates the types and flags necessary for UDP sockets.

namespace std {
namespace experimental {
namespace net {
inline namespace v1 {
namespace ip {

  class udp
  {
  public:
    // types:
    using endpoint = basic_endpoint<udp>;
    using resolver = basic_resolver<udp>;
    using socket = basic_datagram_socket<udp>;

    // static members:
    static constexpr udp v4() noexcept;
    static constexpr udp v6() noexcept;

    udp() = delete;
  };

  // [internet.udp.comparisons], udp comparisons:
  constexpr bool operator==(const udp& a, const udp& b) noexcept;
  constexpr bool operator!=(const udp& a, const udp& b) noexcept;

} // namespace ip
} // inline namespace v1
} // namespace net
} // namespace experimental
} // namespace std

The udp class meets the requirements for an InternetProtocol ([internet.reqmts.protocol]).

Extensible implementations provide the following member functions:

namespace std {
namespace experimental {
namespace net {
inline namespace v1 {
namespace ip {

  class udp
  {
  public:
    constexpr int family() const noexcept;
    constexpr int type() const noexcept;
    constexpr int protocol() const noexcept;
    // remainder unchanged
  };

} // namespace ip
} // inline namespace v1
} // namespace net
} // namespace experimental
} // namespace std

The return values for these member functions are listed in Table [tab:internet.udp.requirements].

Table 39 — Behavior of extensible ip::udp implementations
valuefamily()type()protocol()
udp::v4() AF_INET SOCK_DGRAM IPPROTO_UDP
udp::v6() AF_INET6 SOCK_DGRAM IPPROTO_UDP

Note: The constants AF_INET, AF_INET6 and SOCK_DGRAM are defined in the POSIX <sys/socket.h> header. The constant IPPROTO_UDP is defined in the POSIX <netinet/in.h> header.  — end note ]

21.20.1 ip::udp comparisons [internet.udp.comparisons]

constexpr bool operator==(const udp& a, const udp& b) noexcept;

Returns: A boolean indicating whether two objects of class udp are equal, such that the expression udp::v4() == udp::v4() is true, the expression udp::v6() == udp::v6() is true, and the expression udp::v4() == udp::v6() is false.

constexpr bool operator!=(const udp& a, const udp& b) noexcept;

Returns: !(a == b).