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

100.0% Lines (30 / 30) 100.0% Functions (44 / 44)
reactor_socket_finals.hpp
f(x) Functions (44)
Function Calls Lines Blocks
boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::epoll_local_stream_socket, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_local_stream_service, boost::corosio::detail::epoll_local_stream_acceptor, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>::reactor_stream_socket_impl(boost::corosio::detail::epoll_local_stream_service&) :77 163x 100.0% 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::epoll_tcp_socket, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_tcp_service, boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>::reactor_stream_socket_impl(boost::corosio::detail::epoll_tcp_service&) :77 1037x 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 153x 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 780x 100.0% 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::epoll_local_stream_socket, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_local_stream_service, boost::corosio::detail::epoll_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::epoll_tcp_socket, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_tcp_service, boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>::~reactor_stream_socket_impl() :88 1037x 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 153x 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 780x 100.0% 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::epoll_local_stream_socket, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_local_stream_service, boost::corosio::detail::epoll_local_stream_acceptor, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>::retire() :91 220x 100.0% 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::epoll_tcp_socket, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_tcp_service, boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>::retire() :91 8222x 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>::retire() :91 201x 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>::retire() :91 6629x 100.0% 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::epoll_local_stream_socket, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_local_stream_service, boost::corosio::detail::epoll_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::epoll_tcp_socket, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_tcp_service, boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>::set_option(int, int, void const*, unsigned long) :99 189x 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 105x 100.0% 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::epoll_local_stream_socket, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_local_stream_service, boost::corosio::detail::epoll_local_stream_acceptor, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>::close_socket() :110 697x 100.0% 100.0% boost::corosio::detail::reactor_stream_socket_impl<boost::corosio::detail::epoll_tcp_socket, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_tcp_service, boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>::close_socket() :110 24737x 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 623x 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 19901x 100.0% 100.0% boost::corosio::detail::reactor_dgram_socket_impl<boost::corosio::detail::epoll_local_datagram_socket, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_local_datagram_service, boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint>::reactor_dgram_socket_impl(boost::corosio::detail::epoll_local_datagram_service&) :154 137x 100.0% 100.0% boost::corosio::detail::reactor_dgram_socket_impl<boost::corosio::detail::epoll_udp_socket, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_udp_service, boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::udp_socket::implementation, boost::corosio::endpoint>::reactor_dgram_socket_impl(boost::corosio::detail::epoll_udp_service&) :154 165x 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 128x 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 202x 100.0% 100.0% boost::corosio::detail::reactor_dgram_socket_impl<boost::corosio::detail::epoll_local_datagram_socket, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_local_datagram_service, boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint>::~reactor_dgram_socket_impl() :162 137x 100.0% 100.0% boost::corosio::detail::reactor_dgram_socket_impl<boost::corosio::detail::epoll_udp_socket, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_udp_service, boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::udp_socket::implementation, boost::corosio::endpoint>::~reactor_dgram_socket_impl() :162 165x 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 128x 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 202x 100.0% 100.0% boost::corosio::detail::reactor_dgram_socket_impl<boost::corosio::detail::epoll_local_datagram_socket, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_local_datagram_service, boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint>::retire() :165 175x 100.0% 100.0% boost::corosio::detail::reactor_dgram_socket_impl<boost::corosio::detail::epoll_udp_socket, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_udp_service, boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::udp_socket::implementation, boost::corosio::endpoint>::retire() :165 200x 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>::retire() :165 164x 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>::retire() :165 236x 100.0% 100.0% boost::corosio::detail::reactor_acceptor_impl<boost::corosio::detail::epoll_local_stream_acceptor, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_local_stream_acceptor_service, boost::corosio::detail::epoll_local_stream_socket, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>::reactor_acceptor_impl(boost::corosio::detail::epoll_local_stream_acceptor_service&) :208 54x 100.0% 100.0% boost::corosio::detail::reactor_acceptor_impl<boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_tcp_acceptor_service, boost::corosio::detail::epoll_tcp_socket, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>::reactor_acceptor_impl(boost::corosio::detail::epoll_tcp_acceptor_service&) :208 377x 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 51x 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 298x 100.0% 100.0% boost::corosio::detail::reactor_acceptor_impl<boost::corosio::detail::epoll_local_stream_acceptor, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_local_stream_acceptor_service, boost::corosio::detail::epoll_local_stream_socket, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>::~reactor_acceptor_impl() :216 54x 100.0% 100.0% boost::corosio::detail::reactor_acceptor_impl<boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_tcp_acceptor_service, boost::corosio::detail::epoll_tcp_socket, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>::~reactor_acceptor_impl() :216 377x 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 51x 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 298x 100.0% 100.0% boost::corosio::detail::reactor_acceptor_impl<boost::corosio::detail::epoll_local_stream_acceptor, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_local_stream_acceptor_service, boost::corosio::detail::epoll_local_stream_socket, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>::retire() :219 91x 100.0% 100.0% boost::corosio::detail::reactor_acceptor_impl<boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_tcp_acceptor_service, boost::corosio::detail::epoll_tcp_socket, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>::retire() :219 419x 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>::retire() :219 87x 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>::retire() :219 341x 100.0% 100.0%
Line 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 2133x explicit reactor_stream_socket_impl(Service& svc) noexcept
78 2133x : reactor_stream_socket_impl::reactor_stream_socket(svc)
79 {
80 2133x }
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 2133x ~reactor_stream_socket_impl() override = default;
89
90 /// Recycle into the owning service's pool at zero references.
91 15272x void retire() noexcept override
92 {
93 #if !defined(NDEBUG)
94 15272x this->poison();
95 #endif
96 15272x this->svc_.state_->pool_.recycle(static_cast<Derived*>(this));
97 15272x }
98
99 306x std::error_code set_option(
100 int level,
101 int optname,
102 void const* data,
103 std::size_t size) noexcept override
104 {
105 306x 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 45958x void close_socket() noexcept
111 {
112 45958x hook_.pre_shutdown(this->fd_);
113 45958x this->do_close_socket();
114 45958x }
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 632x explicit reactor_dgram_socket_impl(Service& svc) noexcept
155 632x : reactor_dgram_socket_impl::reactor_datagram_socket(svc)
156 {
157 632x }
158
159 public:
160 using impl_base_type = ImplBase;
161
162 632x ~reactor_dgram_socket_impl() override = default;
163
164 /// Recycle into the owning service's pool at zero references.
165 775x void retire() noexcept override
166 {
167 #if !defined(NDEBUG)
168 775x this->poison();
169 #endif
170 775x this->svc_.state_->pool_.recycle(static_cast<Derived*>(this));
171 775x }
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 780x explicit reactor_acceptor_impl(Service& svc) noexcept
209 780x : reactor_acceptor_impl::reactor_acceptor(svc)
210 {
211 780x }
212
213 public:
214 using impl_base_type = AccImplBase;
215
216 780x ~reactor_acceptor_impl() override = default;
217
218 /// Recycle into the owning service's pool at zero references.
219 938x void retire() noexcept override
220 {
221 #if !defined(NDEBUG)
222 938x this->poison();
223 #endif
224 938x this->svc_.state_->pool_.recycle(static_cast<Derived*>(this));
225 938x }
226
227 std::coroutine_handle<> accept(
228 std::coroutine_handle<>,
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