include/boost/corosio/tcp.hpp

100.0% Lines (7/0/7) 100.0% List of functions (4/0/4)
tcp.hpp
f(x) Functions (4)
Line TLA Hits Source Code
1 //
2 // Copyright (c) 2026 Steve Gerbino
3 //
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 //
7 // Official repository: https://github.com/cppalliance/corosio
8 //
9
10 #ifndef BOOST_COROSIO_TCP_HPP
11 #define BOOST_COROSIO_TCP_HPP
12
13 #include <boost/corosio/detail/config.hpp>
14
15 namespace boost::corosio {
16
17 class tcp_socket;
18 class tcp_acceptor;
19
20 /** Encapsulate the TCP protocol for socket creation.
21
22 This class identifies the TCP protocol and its address family
23 (IPv4 or IPv6). It is used to parameterize socket and acceptor
24 `open()` calls with a self-documenting type.
25
26 The `family()`, `type()`, and `protocol()` members return the
27 three integers passed to the operating system's `socket()`
28 call. Their values are platform-defined constants taken from
29 the system socket headers. For an inline variant that includes
30 those headers, use @ref native_tcp.
31
32 @par Example
33 @code
34 tcp_acceptor acc( ioc );
35 if ( auto ec = acc.open( tcp::v6() ) ) // IPv6 socket
36 return;
37 acc.set_option( socket_option::reuse_address( true ) );
38 if ( auto ec = acc.bind( endpoint( ipv6_address::any(), 8080 ) ) )
39 return;
40 if ( auto ec = acc.listen() )
41 return;
42 @endcode
43
44 @see native_tcp, tcp_socket, tcp_acceptor
45 */
46 class BOOST_COROSIO_DECL tcp
47 {
48 bool v6_;
49 7517x explicit constexpr tcp(bool v6) noexcept : v6_(v6) {}
50
51 public:
52 /// Construct an IPv4 TCP protocol.
53 7465x static constexpr tcp v4() noexcept
54 {
55 7465x return tcp(false);
56 }
57
58 /// Construct an IPv6 TCP protocol.
59 52x static constexpr tcp v6() noexcept
60 {
61 52x return tcp(true);
62 }
63
64 /// Return true if this is IPv6.
65 constexpr bool is_v6() const noexcept
66 {
67 return v6_;
68 }
69
70 /// Return the address family (AF_INET or AF_INET6).
71 int family() const noexcept;
72
73 /// Return the socket type (SOCK_STREAM).
74 static int type() noexcept;
75
76 /// Return the IP protocol (IPPROTO_TCP).
77 static int protocol() noexcept;
78
79 /// The socket type to use with this protocol, @ref tcp_socket.
80 using socket = tcp_socket;
81
82 /// The acceptor type to use with this protocol, @ref tcp_acceptor.
83 using acceptor = tcp_acceptor;
84
85 /// Test for equality.
86 12x friend constexpr bool operator==(tcp a, tcp b) noexcept
87 {
88 12x return a.v6_ == b.v6_;
89 }
90
91 /// Test for inequality.
92 friend constexpr bool operator!=(tcp a, tcp b) noexcept
93 {
94 return a.v6_ != b.v6_;
95 }
96 };
97
98 } // namespace boost::corosio
99
100 #endif // BOOST_COROSIO_TCP_HPP
101