include/boost/corosio/native/detail/select/select_types.hpp

94.7% Lines (36/0/38) 94.4% List of functions (17/0/18)
select_types.hpp
f(x) Functions (18)
Function Calls Lines Blocks
boost::corosio::detail::select_tcp_socket::select_tcp_socket(boost::corosio::detail::select_tcp_service&) :57 6515x 100.0% 100.0% boost::corosio::detail::select_tcp_socket::release_socket() :60 1x 100.0% 100.0% boost::corosio::detail::select_local_stream_socket::select_local_stream_socket(boost::corosio::detail::select_local_stream_service&) :79 114x 100.0% 100.0% boost::corosio::detail::select_local_stream_socket::release_socket() :82 2x 100.0% 100.0% boost::corosio::detail::select_udp_socket::select_udp_socket(boost::corosio::detail::select_udp_service&) :101 122x 100.0% 100.0% boost::corosio::detail::select_udp_socket::release_socket() :104 1x 100.0% 100.0% boost::corosio::detail::select_local_datagram_socket::select_local_datagram_socket(boost::corosio::detail::select_local_datagram_service&) :122 97x 100.0% 100.0% boost::corosio::detail::select_local_datagram_socket::shutdown(boost::corosio::shutdown_type) :125 4x 100.0% 100.0% boost::corosio::detail::select_local_datagram_socket::bind(boost::corosio::local_endpoint) :130 0 0.0% 0.0% boost::corosio::detail::select_local_datagram_socket::release_socket() :135 1x 100.0% 100.0% boost::corosio::detail::select_tcp_acceptor::select_tcp_acceptor(boost::corosio::detail::select_tcp_acceptor_service&) :155 176x 100.0% 100.0% boost::corosio::detail::select_local_stream_acceptor::select_local_stream_acceptor(boost::corosio::detail::select_local_stream_acceptor_service&) :173 38x 100.0% 100.0% boost::corosio::detail::select_tcp_service::select_tcp_service(boost::capy::execution_context&) :187 666x 100.0% 100.0% boost::corosio::detail::select_local_stream_service::select_local_stream_service(boost::capy::execution_context&) :200 666x 100.0% 100.0% boost::corosio::detail::select_udp_service::select_udp_service(boost::capy::execution_context&) :211 666x 100.0% 100.0% boost::corosio::detail::select_local_datagram_service::select_local_datagram_service(boost::capy::execution_context&) :224 666x 100.0% 100.0% boost::corosio::detail::select_tcp_acceptor_service::select_tcp_acceptor_service(boost::capy::execution_context&) :239 666x 100.0% 100.0% boost::corosio::detail::select_local_stream_acceptor_service::select_local_stream_acceptor_service(boost::capy::execution_context&) :256 666x 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_SELECT_SELECT_TYPES_HPP
11 #define BOOST_COROSIO_NATIVE_DETAIL_SELECT_SELECT_TYPES_HPP
12
13 #include <boost/corosio/detail/platform.hpp>
14
15 #if BOOST_COROSIO_HAS_SELECT
16
17 /* Named per-backend types for the select reactor.
18
19 Each class is a final, named wrapper around the parameterized
20 reactor_*_impl templates. Forward-declarable from backend.hpp
21 so the concrete layer never pulls in platform headers.
22 */
23
24 #include <boost/corosio/detail/config.hpp>
25 #include <boost/corosio/native/detail/select/select_traits.hpp>
26 #include <boost/corosio/native/detail/select/select_scheduler.hpp>
27 #include <boost/corosio/native/detail/reactor/reactor_backend.hpp>
28
29 namespace boost::corosio::detail {
30
31 // Forward declarations for cross-references.
32 class select_tcp_socket;
33 class select_tcp_service;
34 class select_tcp_acceptor;
35 class select_tcp_acceptor_service;
36 class select_udp_socket;
37 class select_udp_service;
38 class select_local_stream_socket;
39 class select_local_stream_service;
40 class select_local_stream_acceptor;
41 class select_local_stream_acceptor_service;
42 class select_local_datagram_socket;
43 class select_local_datagram_service;
44
45 // --- Stream sockets ---
46
47 class select_tcp_socket final
48 : public reactor_stream_socket_impl<
49 select_tcp_socket, select_traits, select_tcp_service,
50 select_tcp_acceptor, tcp_socket::implementation, endpoint>
51 {
52 using base_type = reactor_stream_socket_impl<
53 select_tcp_socket, select_traits, select_tcp_service,
54 select_tcp_acceptor, tcp_socket::implementation, endpoint>;
55 friend select_tcp_service;
56 public:
57 6515x explicit select_tcp_socket(select_tcp_service& svc) noexcept
58 6515x : base_type(svc) {}
59
60 1x native_handle_type release_socket() noexcept override
61 {
62 1x hook_ = {};
63 1x return this->do_release_socket();
64 }
65 };
66
67 class select_local_stream_socket final
68 : public reactor_stream_socket_impl<
69 select_local_stream_socket, select_traits,
70 select_local_stream_service, select_local_stream_acceptor,
71 local_stream_socket::implementation, corosio::local_endpoint>
72 {
73 using base_type = reactor_stream_socket_impl<
74 select_local_stream_socket, select_traits,
75 select_local_stream_service, select_local_stream_acceptor,
76 local_stream_socket::implementation, corosio::local_endpoint>;
77 friend select_local_stream_service;
78 public:
79 114x explicit select_local_stream_socket(select_local_stream_service& svc) noexcept
80 114x : base_type(svc) {}
81
82 2x native_handle_type release_socket() noexcept override
83 {
84 2x hook_ = {};
85 2x return this->do_release_socket();
86 }
87 };
88
89 // --- Datagram sockets ---
90
91 class select_udp_socket final
92 : public reactor_dgram_socket_impl<
93 select_udp_socket, select_traits, select_udp_service,
94 select_tcp_acceptor, udp_socket::implementation, endpoint>
95 {
96 using base_type = reactor_dgram_socket_impl<
97 select_udp_socket, select_traits, select_udp_service,
98 select_tcp_acceptor, udp_socket::implementation, endpoint>;
99 friend select_udp_service;
100 public:
101 122x explicit select_udp_socket(select_udp_service& svc) noexcept
102 122x : base_type(svc) {}
103
104 1x native_handle_type release_socket() noexcept override
105 {
106 1x return this->do_release_socket();
107 }
108 };
109
110 class select_local_datagram_socket final
111 : public reactor_dgram_socket_impl<
112 select_local_datagram_socket, select_traits,
113 select_local_datagram_service, select_tcp_acceptor,
114 local_datagram_socket::implementation, corosio::local_endpoint>
115 {
116 using base_type = reactor_dgram_socket_impl<
117 select_local_datagram_socket, select_traits,
118 select_local_datagram_service, select_tcp_acceptor,
119 local_datagram_socket::implementation, corosio::local_endpoint>;
120 friend select_local_datagram_service;
121 public:
122 97x explicit select_local_datagram_socket(select_local_datagram_service& svc) noexcept
123 97x : base_type(svc) {}
124
125 4x std::error_code shutdown(corosio::shutdown_type what) noexcept override
126 {
127 4x return this->do_shutdown(static_cast<int>(what));
128 }
129
130 std::error_code bind(corosio::local_endpoint ep) noexcept override
131 {
132 return this->do_bind(ep);
133 }
134
135 1x native_handle_type release_socket() noexcept override
136 {
137 1x return this->do_release_socket();
138 }
139 };
140
141 // --- Acceptors ---
142
143 class select_tcp_acceptor final
144 : public reactor_acceptor_impl<
145 select_tcp_acceptor, select_traits,
146 select_tcp_acceptor_service, select_tcp_socket,
147 tcp_acceptor::implementation, endpoint>
148 {
149 using base_type = reactor_acceptor_impl<
150 select_tcp_acceptor, select_traits,
151 select_tcp_acceptor_service, select_tcp_socket,
152 tcp_acceptor::implementation, endpoint>;
153 friend select_tcp_acceptor_service;
154 public:
155 176x explicit select_tcp_acceptor(select_tcp_acceptor_service& svc) noexcept
156 176x : base_type(svc) {}
157 };
158
159 class select_local_stream_acceptor final
160 : public reactor_acceptor_impl<
161 select_local_stream_acceptor, select_traits,
162 select_local_stream_acceptor_service,
163 select_local_stream_socket,
164 local_stream_acceptor::implementation, corosio::local_endpoint>
165 {
166 using base_type = reactor_acceptor_impl<
167 select_local_stream_acceptor, select_traits,
168 select_local_stream_acceptor_service,
169 select_local_stream_socket,
170 local_stream_acceptor::implementation, corosio::local_endpoint>;
171 friend select_local_stream_acceptor_service;
172 public:
173 38x explicit select_local_stream_acceptor(
174 select_local_stream_acceptor_service& svc) noexcept
175 38x : base_type(svc) {}
176 };
177
178 // --- Services ---
179
180 class BOOST_COROSIO_DECL select_tcp_service final
181 : public reactor_tcp_service_impl<
182 select_tcp_service, select_traits, select_tcp_socket>
183 {
184 using base_type = reactor_tcp_service_impl<
185 select_tcp_service, select_traits, select_tcp_socket>;
186 public:
187 666x explicit select_tcp_service(capy::execution_context& ctx)
188 666x : base_type(ctx) {}
189 };
190
191 class BOOST_COROSIO_DECL select_local_stream_service final
192 : public reactor_local_stream_service_impl<
193 select_local_stream_service, select_traits,
194 select_local_stream_socket>
195 {
196 using base_type = reactor_local_stream_service_impl<
197 select_local_stream_service, select_traits,
198 select_local_stream_socket>;
199 public:
200 666x explicit select_local_stream_service(capy::execution_context& ctx)
201 666x : base_type(ctx) {}
202 };
203
204 class BOOST_COROSIO_DECL select_udp_service final
205 : public reactor_udp_service_impl<
206 select_udp_service, select_traits, select_udp_socket>
207 {
208 using base_type = reactor_udp_service_impl<
209 select_udp_service, select_traits, select_udp_socket>;
210 public:
211 666x explicit select_udp_service(capy::execution_context& ctx)
212 666x : base_type(ctx) {}
213 };
214
215 class BOOST_COROSIO_DECL select_local_datagram_service final
216 : public reactor_local_dgram_service_impl<
217 select_local_datagram_service, select_traits,
218 select_local_datagram_socket>
219 {
220 using base_type = reactor_local_dgram_service_impl<
221 select_local_datagram_service, select_traits,
222 select_local_datagram_socket>;
223 public:
224 666x explicit select_local_datagram_service(capy::execution_context& ctx)
225 666x : base_type(ctx) {}
226 };
227
228 class BOOST_COROSIO_DECL select_tcp_acceptor_service final
229 : public reactor_acceptor_service_impl<
230 select_tcp_acceptor_service, select_traits,
231 tcp_acceptor_service, select_tcp_acceptor,
232 select_tcp_service, endpoint>
233 {
234 using base_type = reactor_acceptor_service_impl<
235 select_tcp_acceptor_service, select_traits,
236 tcp_acceptor_service, select_tcp_acceptor,
237 select_tcp_service, endpoint>;
238 public:
239 666x explicit select_tcp_acceptor_service(capy::execution_context& ctx)
240 666x : base_type(ctx) {}
241 };
242
243 class BOOST_COROSIO_DECL select_local_stream_acceptor_service final
244 : public reactor_acceptor_service_impl<
245 select_local_stream_acceptor_service, select_traits,
246 local_stream_acceptor_service,
247 select_local_stream_acceptor,
248 select_local_stream_service, corosio::local_endpoint>
249 {
250 using base_type = reactor_acceptor_service_impl<
251 select_local_stream_acceptor_service, select_traits,
252 local_stream_acceptor_service,
253 select_local_stream_acceptor,
254 select_local_stream_service, corosio::local_endpoint>;
255 public:
256 666x explicit select_local_stream_acceptor_service(capy::execution_context& ctx)
257 666x : base_type(ctx) {}
258 };
259
260 } // namespace boost::corosio::detail
261
262 #endif // BOOST_COROSIO_HAS_SELECT
263
264 #endif // BOOST_COROSIO_NATIVE_DETAIL_SELECT_SELECT_TYPES_HPP
265