include/boost/corosio/udp.hpp

100.0% Lines (5/0/5) 100.0% List of functions (3/0/3)
udp.hpp
f(x) Functions (3)
Line TLA Hits Source Code
1 //
2 // Copyright (c) 2026 Steve Gerbino
3 // Copyright (c) 2026 Michael Vandeberg
4 //
5 // Distributed under the Boost Software License, Version 1.0. (See accompanying
6 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 //
8 // Official repository: https://github.com/cppalliance/corosio
9 //
10
11 #ifndef BOOST_COROSIO_UDP_HPP
12 #define BOOST_COROSIO_UDP_HPP
13
14 #include <boost/corosio/detail/config.hpp>
15
16 namespace boost::corosio {
17
18 class udp_socket;
19
20 /** Encapsulate the UDP protocol for socket creation.
21
22 This class identifies the UDP protocol and its address family
23 (IPv4 or IPv6). It is used to parameterize `udp_socket::open()`
24 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_udp.
31
32 @par Example
33 @par !example udp
34
35 @see native_udp, udp_socket
36 */
37 class BOOST_COROSIO_DECL udp
38 {
39 bool v6_;
40 321x explicit constexpr udp(bool v6) noexcept : v6_(v6) {}
41
42 public:
43 /// Construct an IPv4 UDP protocol.
44 297x static constexpr udp v4() noexcept
45 {
46 297x return udp(false);
47 }
48
49 /// Construct an IPv6 UDP protocol.
50 24x static constexpr udp v6() noexcept
51 {
52 24x return udp(true);
53 }
54
55 /// Return true if this is IPv6.
56 constexpr bool is_v6() const noexcept
57 {
58 return v6_;
59 }
60
61 /// Return the address family (AF_INET or AF_INET6).
62 int family() const noexcept;
63
64 /// Return the socket type (SOCK_DGRAM).
65 static int type() noexcept;
66
67 /// Return the IP protocol (IPPROTO_UDP).
68 static int protocol() noexcept;
69
70 /// The socket type to use with this protocol, @ref udp_socket.
71 using socket = udp_socket;
72
73 /// Test for equality.
74 friend constexpr bool operator==(udp a, udp b) noexcept
75 {
76 return a.v6_ == b.v6_;
77 }
78
79 /// Test for inequality.
80 friend constexpr bool operator!=(udp a, udp b) noexcept
81 {
82 return a.v6_ != b.v6_;
83 }
84 };
85
86 } // namespace boost::corosio
87
88 #endif // BOOST_COROSIO_UDP_HPP
89