TLA Line data 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 HIT 321 : explicit constexpr udp(bool v6) noexcept : v6_(v6) {}
41 :
42 : public:
43 : /// Construct an IPv4 UDP protocol.
44 297 : static constexpr udp v4() noexcept
45 : {
46 297 : return udp(false);
47 : }
48 :
49 : /// Construct an IPv6 UDP protocol.
50 24 : static constexpr udp v6() noexcept
51 : {
52 24 : 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
|