include/boost/corosio/native/detail/reactor/reactor_socket_finals.hpp

100.0% Lines (33 / 33) 29.2% Branches (7 / 24) 100.0% Functions (44 / 44)
reactor_socket_finals.hpp
f(x) Functions (44)
Function Calls Lines Branches Blocks
boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>::reactor_stream_socket_impl(boost::corosio::detail::kqueue_local_stream_service&) :77 169x 100.0% – 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>::reactor_stream_socket_impl(boost::corosio::detail::kqueue_tcp_service&) :77 4522x 100.0% – 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_service, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>::reactor_stream_socket_impl(boost::corosio::detail::select_local_stream_service&) :77 163x 100.0% – 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_tcp_acceptor, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>::reactor_stream_socket_impl(boost::corosio::detail::select_tcp_service&) :77 1987x 100.0% – 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>::~reactor_stream_socket_impl() :88 169x 100.0% – 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>::~reactor_stream_socket_impl() :88 4521x 100.0% – 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_service, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>::~reactor_stream_socket_impl() :88 163x 100.0% – 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_tcp_acceptor, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>::~reactor_stream_socket_impl() :88 1987x 100.0% – 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>::retire() :91 209x 100.0% – 66.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>::retire() :91 28631x 100.0% 50.0% 66.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_service, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>::retire() :91 203x 100.0% 25.0% 66.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_tcp_acceptor, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>::retire() :91 11327x 100.0% 50.0% 66.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>::set_option(int, int, void const*, unsigned long) :99 6x 100.0% – 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>::set_option(int, int, void const*, unsigned long) :99 12545x 100.0% – 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_service, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>::set_option(int, int, void const*, unsigned long) :99 6x 100.0% – 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_tcp_acceptor, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>::set_option(int, int, void const*, unsigned long) :99 1675x 100.0% – 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>::close_socket() :110 574x 100.0% – 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>::close_socket() :110 92331x 100.0% – 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_service, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>::close_socket() :110 551x 100.0% – 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_tcp_acceptor, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>::close_socket() :110 34408x 100.0% – 100.0% boost::corosio::detail::reactor_dgram_socket_impl<boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint>::reactor_dgram_socket_impl(boost::corosio::detail::kqueue_local_datagram_service&) :154 125x 100.0% – 100.0% boost::corosio::detail::reactor_dgram_socket_impl<boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::udp_socket::implementation, boost::corosio::endpoint>::reactor_dgram_socket_impl(boost::corosio::detail::kqueue_udp_service&) :154 167x 100.0% – 100.0% boost::corosio::detail::reactor_dgram_socket_impl<boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint>::reactor_dgram_socket_impl(boost::corosio::detail::select_local_datagram_service&) :154 121x 100.0% – 100.0% boost::corosio::detail::reactor_dgram_socket_impl<boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_tcp_acceptor, boost::corosio::udp_socket::implementation, boost::corosio::endpoint>::reactor_dgram_socket_impl(boost::corosio::detail::select_udp_service&) :154 163x 100.0% – 100.0% boost::corosio::detail::reactor_dgram_socket_impl<boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint>::~reactor_dgram_socket_impl() :162 125x 100.0% – 100.0% boost::corosio::detail::reactor_dgram_socket_impl<boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::udp_socket::implementation, boost::corosio::endpoint>::~reactor_dgram_socket_impl() :162 167x 100.0% – 100.0% boost::corosio::detail::reactor_dgram_socket_impl<boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint>::~reactor_dgram_socket_impl() :162 121x 100.0% – 100.0% boost::corosio::detail::reactor_dgram_socket_impl<boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_tcp_acceptor, boost::corosio::udp_socket::implementation, boost::corosio::endpoint>::~reactor_dgram_socket_impl() :162 163x 100.0% – 100.0% boost::corosio::detail::reactor_dgram_socket_impl<boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint>::retire() :165 159x 100.0% – 66.0% boost::corosio::detail::reactor_dgram_socket_impl<boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::udp_socket::implementation, boost::corosio::endpoint>::retire() :165 202x 100.0% – 66.0% boost::corosio::detail::reactor_dgram_socket_impl<boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint>::retire() :165 155x 100.0% 37.5% 66.0% boost::corosio::detail::reactor_dgram_socket_impl<boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_tcp_acceptor, boost::corosio::udp_socket::implementation, boost::corosio::endpoint>::retire() :165 197x 100.0% 50.0% 66.0% boost::corosio::detail::reactor_acceptor_impl<boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_acceptor_service, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>::reactor_acceptor_impl(boost::corosio::detail::kqueue_local_stream_acceptor_service&) :208 59x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_impl<boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_acceptor_service, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>::reactor_acceptor_impl(boost::corosio::detail::kqueue_tcp_acceptor_service&) :208 1244x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_impl<boost::corosio::detail::select_local_stream_acceptor, boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_acceptor_service, boost::corosio::detail::select_local_stream_socket, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>::reactor_acceptor_impl(boost::corosio::detail::select_local_stream_acceptor_service&) :208 57x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_impl<boost::corosio::detail::select_tcp_acceptor, boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_acceptor_service, boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>::reactor_acceptor_impl(boost::corosio::detail::select_tcp_acceptor_service&) :208 774x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_impl<boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_acceptor_service, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>::~reactor_acceptor_impl() :216 59x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_impl<boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_acceptor_service, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>::~reactor_acceptor_impl() :216 1244x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_impl<boost::corosio::detail::select_local_stream_acceptor, boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_acceptor_service, boost::corosio::detail::select_local_stream_socket, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>::~reactor_acceptor_impl() :216 57x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_impl<boost::corosio::detail::select_tcp_acceptor, boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_acceptor_service, boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>::~reactor_acceptor_impl() :216 774x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_impl<boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_acceptor_service, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>::retire() :219 94x 100.0% – 66.0% boost::corosio::detail::reactor_acceptor_impl<boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_acceptor_service, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>::retire() :219 2604x 100.0% 50.0% 66.0% boost::corosio::detail::reactor_acceptor_impl<boost::corosio::detail::select_local_stream_acceptor, boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_acceptor_service, boost::corosio::detail::select_local_stream_socket, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>::retire() :219 92x 100.0% 25.0% 66.0% boost::corosio::detail::reactor_acceptor_impl<boost::corosio::detail::select_tcp_acceptor, boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_acceptor_service, boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>::retire() :219 1100x 100.0% 50.0% 66.0%
Line Branch TLA Hits Source Code
1 //
2 // Copyright (c) 2026 Michael Vandeberg
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_NATIVE_DETAIL_REACTOR_REACTOR_SOCKET_FINALS_HPP
11 #define BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_SOCKET_FINALS_HPP
12
13 /* Parameterized socket, datagram, and acceptor implementation bases.
14
15 Named per-backend classes (e.g. epoll_tcp_socket) inherit from
16 these templates, supplying the concrete service/peer types. The
17 per-backend type files ({backend}_types.hpp) define the final classes.
18 */
19
20 #include <boost/corosio/tcp_socket.hpp>
21 #include <boost/corosio/udp_socket.hpp>
22 #include <boost/corosio/local_stream_socket.hpp>
23 #include <boost/corosio/local_datagram_socket.hpp>
24 #include <boost/corosio/tcp_acceptor.hpp>
25 #include <boost/corosio/local_stream_acceptor.hpp>
26 #include <boost/corosio/shutdown_type.hpp>
27
28 #include <boost/corosio/native/detail/reactor/reactor_stream_socket.hpp>
29 #include <boost/corosio/native/detail/reactor/reactor_datagram_socket.hpp>
30 #include <boost/corosio/native/detail/reactor/reactor_acceptor.hpp>
31 #include <boost/corosio/native/detail/reactor/reactor_stream_ops.hpp>
32 #include <boost/corosio/native/detail/reactor/reactor_datagram_ops.hpp>
33
34 #include <boost/corosio/native/detail/make_err.hpp>
35
36 namespace boost::corosio::detail {
37
38 // ============================================================
39 // Stream socket implementation base
40 // ============================================================
41
42 /** Intermediate base for reactor stream sockets.
43
44 Holds the per-socket hook (e.g., kqueue SO_LINGER tracking),
45 the set_option override, and the close/release shadows.
46 Named per-backend classes inherit from this as final.
47
48 @tparam Derived The named final class (CRTP self).
49 @tparam Traits Backend traits (epoll_traits, etc.).
50 @tparam Service The concrete service type.
51 @tparam AcceptorType The concrete acceptor type (for op base).
52 @tparam ImplBase The public vtable base.
53 @tparam Endpoint endpoint or local_endpoint.
54 */
55 template<
56 class Derived,
57 class Traits,
58 class Service,
59 class AcceptorType,
60 class ImplBase,
61 class Endpoint>
62 class reactor_stream_socket_impl
63 : public reactor_stream_socket<
64 Derived,
65 Service,
66 reactor_stream_connect_op<Traits, Derived, AcceptorType, Endpoint>,
67 reactor_stream_read_op<Traits, Derived, AcceptorType, Endpoint>,
68 reactor_stream_write_op<Traits, Derived, AcceptorType, Endpoint>,
69 reactor_stream_wait_op<Traits, Derived, AcceptorType, Endpoint>,
70 typename Traits::desc_state_type,
71 ImplBase,
72 Endpoint>
73 {
74 friend Derived;
75 friend Service;
76
77 6841x explicit reactor_stream_socket_impl(Service& svc) noexcept
78 6841x : reactor_stream_socket_impl::reactor_stream_socket(svc)
79 6841x {
80 6841x }
81
82 public:
83 using impl_base_type = ImplBase;
84
85 // Per-socket hook state (e.g., kqueue SO_LINGER tracking).
86 [[no_unique_address]] typename Traits::stream_socket_hook hook_;
87
88 6840x ~reactor_stream_socket_impl() override = default;
89
90 /// Recycle into the owning service's pool at zero references.
91 40370x void retire() noexcept override
92 {
93 #if !defined(NDEBUG)
94 40370x this->poison();
95 #endif
96
2/8
✓ Branch 0 taken 28840 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 11530 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
40370x this->svc_.state_->pool_.recycle(static_cast<Derived*>(this));
97 40370x }
98
99 14232x std::error_code set_option(
100 int level,
101 int optname,
102 void const* data,
103 std::size_t size) noexcept override
104 {
105 14232x return hook_.on_set_option(this->fd_, level, optname, data, size);
106 }
107
108 // Shadows reactor_stream_socket::close_socket so the hook fires on
109 // every fd close path.
110 127864x void close_socket() noexcept
111 {
112 127864x hook_.pre_shutdown(this->fd_);
113 127864x this->do_close_socket();
114 127864x }
115 };
116
117 // ============================================================
118 // Datagram socket implementation base
119 // ============================================================
120
121 /** Intermediate base for reactor datagram sockets.
122
123 @tparam Derived The named final class (CRTP self).
124 @tparam Traits Backend traits.
125 @tparam Service The concrete datagram service type.
126 @tparam AcceptorType The concrete acceptor type (placeholder for op base).
127 @tparam ImplBase The public vtable base.
128 @tparam Endpoint endpoint or local_endpoint.
129 */
130 template<
131 class Derived,
132 class Traits,
133 class Service,
134 class AcceptorType,
135 class ImplBase,
136 class Endpoint>
137 class reactor_dgram_socket_impl
138 : public reactor_datagram_socket<
139 Derived,
140 Service,
141 reactor_dgram_connect_op<Traits, Derived, AcceptorType, Endpoint>,
142 reactor_dgram_send_to_op<Traits, Derived, AcceptorType, Endpoint>,
143 reactor_dgram_recv_from_op<Traits, Derived, AcceptorType, Endpoint>,
144 reactor_dgram_send_op<Traits, Derived, AcceptorType, Endpoint>,
145 reactor_dgram_recv_op<Traits, Derived, AcceptorType, Endpoint>,
146 reactor_dgram_wait_op<Traits, Derived, AcceptorType, Endpoint>,
147 typename Traits::desc_state_type,
148 ImplBase,
149 Endpoint>
150 {
151 friend Derived;
152 friend Service;
153
154 576x explicit reactor_dgram_socket_impl(Service& svc) noexcept
155 576x : reactor_dgram_socket_impl::reactor_datagram_socket(svc)
156 576x {
157 576x }
158
159 public:
160 using impl_base_type = ImplBase;
161
162 576x ~reactor_dgram_socket_impl() override = default;
163
164 /// Recycle into the owning service's pool at zero references.
165 713x void retire() noexcept override
166 {
167 #if !defined(NDEBUG)
168 713x this->poison();
169 #endif
170
3/8
✓ Branch 0 taken 361 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 165 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 187 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
713x this->svc_.state_->pool_.recycle(static_cast<Derived*>(this));
171 713x }
172 };
173
174 // ============================================================
175 // Acceptor implementation base
176 // ============================================================
177
178 /** Intermediate base for reactor stream acceptors.
179
180 @tparam Derived The named final class (CRTP self).
181 @tparam Traits Backend traits.
182 @tparam Service The concrete acceptor service type.
183 @tparam SocketFinal The concrete stream socket type (for accept).
184 @tparam AccImplBase The public vtable base.
185 @tparam Endpoint endpoint or local_endpoint.
186 */
187 template<
188 class Derived,
189 class Traits,
190 class Service,
191 class SocketFinal,
192 class AccImplBase,
193 class Endpoint>
194 class reactor_acceptor_impl
195 : public reactor_acceptor<
196 Derived,
197 Service,
198 reactor_stream_base_op<Traits, SocketFinal, Derived, Endpoint>,
199 reactor_stream_accept_op<Traits, SocketFinal, Derived, Endpoint>,
200 reactor_stream_wait_op<Traits, SocketFinal, Derived, Endpoint>,
201 typename Traits::desc_state_type,
202 AccImplBase,
203 Endpoint>
204 {
205 friend Derived;
206 friend Service;
207
208 2134x explicit reactor_acceptor_impl(Service& svc) noexcept
209 2134x : reactor_acceptor_impl::reactor_acceptor(svc)
210 2134x {
211 2134x }
212
213 public:
214 using impl_base_type = AccImplBase;
215
216 2134x ~reactor_acceptor_impl() override = default;
217
218 /// Recycle into the owning service's pool at zero references.
219 3890x void retire() noexcept override
220 {
221 #if !defined(NDEBUG)
222 3890x this->poison();
223 #endif
224
2/8
✓ Branch 0 taken 2698 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1192 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
3890x this->svc_.state_->pool_.recycle(static_cast<Derived*>(this));
225 3890x }
226
227 std::coroutine_handle<> accept(
228 capy::continuation&,
229 capy::executor_ref,
230 std::stop_token,
231 std::error_code*,
232 io_object::implementation**) override;
233 };
234
235 } // namespace boost::corosio::detail
236
237 #endif // BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_SOCKET_FINALS_HPP
238