21 Internet protocol [internet]

21.19 Class ip::tcp [internet.tcp]

The class tcp encapsulates the types and flags necessary for TCP sockets.

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

  class tcp
  {
  public:
    // types:
    using endpoint = basic_endpoint<tcp>;
    using resolver = basic_resolver<tcp>;
    using socket = basic_stream_socket<tcp>;
    using acceptor = basic_socket_acceptor<tcp>;
    using iostream = basic_socket_iostream<tcp>;
    class no_delay;

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

    tcp() = delete;
  };

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

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

The tcp 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 tcp
  {
  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.tcp.requirements].

Table 38 — Behavior of extensible ip::tcp implementations
valuefamily()type()protocol()
tcp::v4() AF_INET SOCK_STREAM IPPROTO_TCP
tcp::v6() AF_INET6 SOCK_STREAM IPPROTO_TCP

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

21.19.1 ip::tcp comparisons [internet.tcp.comparisons]

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

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

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

Returns: !(a == b).