100.00% Lines (5/5) 100.00% Functions (3/3)
TLA Baseline Branch
Line Hits Code Line Hits Code
1   // 1   //
2   // Copyright (c) 2026 Steve Gerbino 2   // Copyright (c) 2026 Steve Gerbino
3   // 3   //
4   // Distributed under the Boost Software License, Version 1.0. (See accompanying 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) 5   // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6   // 6   //
7   // Official repository: https://github.com/cppalliance/corosio 7   // Official repository: https://github.com/cppalliance/corosio
8   // 8   //
9   9  
10   #ifndef BOOST_COROSIO_UDP_HPP 10   #ifndef BOOST_COROSIO_UDP_HPP
11   #define BOOST_COROSIO_UDP_HPP 11   #define BOOST_COROSIO_UDP_HPP
12   12  
13   #include <boost/corosio/detail/config.hpp> 13   #include <boost/corosio/detail/config.hpp>
14   14  
15   namespace boost::corosio { 15   namespace boost::corosio {
16   16  
17   class udp_socket; 17   class udp_socket;
18   18  
19   /** Encapsulate the UDP protocol for socket creation. 19   /** Encapsulate the UDP protocol for socket creation.
20   20  
21   This class identifies the UDP protocol and its address family 21   This class identifies the UDP protocol and its address family
22   (IPv4 or IPv6). It is used to parameterize `udp_socket::open()` 22   (IPv4 or IPv6). It is used to parameterize `udp_socket::open()`
23   calls with a self-documenting type. 23   calls with a self-documenting type.
24   24  
25 - The `family()`, `type()`, and `protocol()` members return the 25 + The `family()`, `type()`, and `protocol()` members are
26 - three integers passed to the operating system's `socket()` 26 + implemented in the compiled library to avoid exposing
27 - call. Their values are platform-defined constants taken from 27 + platform socket headers. For an inline variant that includes
28 - the system socket headers. For an inline variant that includes 28 + platform headers, use @ref native_udp.
29 - those headers, use @ref native_udp.  
30   29  
31   @par Example 30   @par Example
32   @code 31   @code
33   udp_socket sock( ioc ); 32   udp_socket sock( ioc );
34   sock.open( udp::v4() ); 33   sock.open( udp::v4() );
35   sock.bind( endpoint( ipv4_address::any(), 9000 ) ); 34   sock.bind( endpoint( ipv4_address::any(), 9000 ) );
36   @endcode 35   @endcode
37   36  
38   @see native_udp, udp_socket 37   @see native_udp, udp_socket
39   */ 38   */
40   class BOOST_COROSIO_DECL udp 39   class BOOST_COROSIO_DECL udp
41   { 40   {
42   bool v6_; 41   bool v6_;
HITCBC 43   162 explicit constexpr udp(bool v6) noexcept : v6_(v6) {} 42   162 explicit constexpr udp(bool v6) noexcept : v6_(v6) {}
44   43  
45   public: 44   public:
46   /// Construct an IPv4 UDP protocol. 45   /// Construct an IPv4 UDP protocol.
HITCBC 47   142 static constexpr udp v4() noexcept 46   142 static constexpr udp v4() noexcept
48   { 47   {
HITCBC 49   142 return udp(false); 48   142 return udp(false);
50   } 49   }
51   50  
52   /// Construct an IPv6 UDP protocol. 51   /// Construct an IPv6 UDP protocol.
HITCBC 53   20 static constexpr udp v6() noexcept 52   20 static constexpr udp v6() noexcept
54   { 53   {
HITCBC 55   20 return udp(true); 54   20 return udp(true);
56   } 55   }
57   56  
58   /// Return true if this is IPv6. 57   /// Return true if this is IPv6.
59   constexpr bool is_v6() const noexcept 58   constexpr bool is_v6() const noexcept
60   { 59   {
61   return v6_; 60   return v6_;
62   } 61   }
63   62  
64   /// Return the address family (AF_INET or AF_INET6). 63   /// Return the address family (AF_INET or AF_INET6).
65   int family() const noexcept; 64   int family() const noexcept;
66   65  
67   /// Return the socket type (SOCK_DGRAM). 66   /// Return the socket type (SOCK_DGRAM).
68   static int type() noexcept; 67   static int type() noexcept;
69   68  
70   /// Return the IP protocol (IPPROTO_UDP). 69   /// Return the IP protocol (IPPROTO_UDP).
71   static int protocol() noexcept; 70   static int protocol() noexcept;
72   71  
73 - /// The socket type to use with this protocol, @ref udp_socket. 72 + /// The associated socket type.
74   using socket = udp_socket; 73   using socket = udp_socket;
75   74  
76   /// Test for equality. 75   /// Test for equality.
77   friend constexpr bool operator==(udp a, udp b) noexcept 76   friend constexpr bool operator==(udp a, udp b) noexcept
78   { 77   {
79   return a.v6_ == b.v6_; 78   return a.v6_ == b.v6_;
80   } 79   }
81   80  
82   /// Test for inequality. 81   /// Test for inequality.
83   friend constexpr bool operator!=(udp a, udp b) noexcept 82   friend constexpr bool operator!=(udp a, udp b) noexcept
84   { 83   {
85   return a.v6_ != b.v6_; 84   return a.v6_ != b.v6_;
86   } 85   }
87   }; 86   };
88   87  
89   } // namespace boost::corosio 88   } // namespace boost::corosio
90   89  
91   #endif // BOOST_COROSIO_UDP_HPP 90   #endif // BOOST_COROSIO_UDP_HPP