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

96.4% Lines (54 / 56) 95.2% Functions (20 / 21)
select_types.hpp
f(x) Functions (21)
Function Calls Lines Blocks
boost::corosio::detail::select_tcp_socket::select_tcp_socket(boost::corosio::detail::select_tcp_service&) :69 6262x 100.0% 100.0% boost::corosio::detail::select_tcp_socket::release_socket() :74 2x 100.0% 100.0% boost::corosio::detail::select_local_stream_socket::select_local_stream_socket(boost::corosio::detail::select_local_stream_service&) :100 166x 100.0% 100.0% boost::corosio::detail::select_local_stream_socket::release_socket() :106 2x 100.0% 100.0% boost::corosio::detail::select_udp_socket::select_udp_socket(boost::corosio::detail::select_udp_service&) :134 191x 100.0% 100.0% boost::corosio::detail::select_udp_socket::shutdown(boost::corosio::shutdown_type) :139 3x 100.0% 100.0% boost::corosio::detail::select_udp_socket::release_socket() :144 2x 100.0% 100.0% boost::corosio::detail::select_local_datagram_socket::select_local_datagram_socket(boost::corosio::detail::select_local_datagram_service&) :169 130x 100.0% 100.0% boost::corosio::detail::select_local_datagram_socket::shutdown(boost::corosio::shutdown_type) :175 4x 100.0% 100.0% boost::corosio::detail::select_local_datagram_socket::bind(boost::corosio::local_endpoint) :180 0 0.0% 0.0% boost::corosio::detail::select_local_datagram_socket::release_socket() :185 2x 100.0% 100.0% boost::corosio::detail::select_tcp_acceptor::select_tcp_acceptor(boost::corosio::detail::select_tcp_acceptor_service&) :212 292x 100.0% 100.0% boost::corosio::detail::select_local_stream_acceptor::select_local_stream_acceptor(boost::corosio::detail::select_local_stream_acceptor_service&) :237 54x 100.0% 100.0% boost::corosio::detail::select_descriptor::select_descriptor(boost::corosio::detail::select_descriptor_service&) :261 29x 100.0% 100.0% boost::corosio::detail::select_tcp_service::select_tcp_service(boost::capy::execution_context&) :281 323x 100.0% 100.0% boost::corosio::detail::select_local_stream_service::select_local_stream_service(boost::capy::execution_context&) :298 100x 100.0% 100.0% boost::corosio::detail::select_udp_service::select_udp_service(boost::capy::execution_context&) :316 139x 100.0% 100.0% boost::corosio::detail::select_local_datagram_service::select_local_datagram_service(boost::capy::execution_context&) :333 76x 100.0% 100.0% boost::corosio::detail::select_tcp_acceptor_service::select_tcp_acceptor_service(boost::capy::execution_context&) :357 264x 100.0% 100.0% boost::corosio::detail::select_local_stream_acceptor_service::select_local_stream_acceptor_service(boost::capy::execution_context&) :381 45x 100.0% 100.0% boost::corosio::detail::select_descriptor_service::select_descriptor_service(boost::capy::execution_context&) :399 28x 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 #include <boost/corosio/native/detail/reactor/reactor_descriptor_service.hpp>
29
30 namespace boost::corosio::detail {
31
32 // Forward declarations for cross-references.
33 class select_tcp_socket;
34 class select_tcp_service;
35 class select_tcp_acceptor;
36 class select_tcp_acceptor_service;
37 class select_udp_socket;
38 class select_udp_service;
39 class select_local_stream_socket;
40 class select_local_stream_service;
41 class select_local_stream_acceptor;
42 class select_local_stream_acceptor_service;
43 class select_local_datagram_socket;
44 class select_local_datagram_service;
45 class select_descriptor;
46 class select_descriptor_service;
47
48 // --- Stream sockets ---
49
50 class select_tcp_socket final
51 : public reactor_stream_socket_impl<
52 select_tcp_socket,
53 select_traits,
54 select_tcp_service,
55 select_tcp_acceptor,
56 tcp_socket::implementation,
57 endpoint>
58 {
59 using base_type = reactor_stream_socket_impl<
60 select_tcp_socket,
61 select_traits,
62 select_tcp_service,
63 select_tcp_acceptor,
64 tcp_socket::implementation,
65 endpoint>;
66 friend select_tcp_service;
67
68 public:
69 6262x explicit select_tcp_socket(select_tcp_service& svc) noexcept
70 6262x : base_type(svc)
71 {
72 6262x }
73
74 2x native_handle_type release_socket() noexcept override
75 {
76 2x hook_ = {};
77 2x return this->do_release_socket();
78 }
79 };
80
81 class select_local_stream_socket final
82 : public reactor_stream_socket_impl<
83 select_local_stream_socket,
84 select_traits,
85 select_local_stream_service,
86 select_local_stream_acceptor,
87 local_stream_socket::implementation,
88 corosio::local_endpoint>
89 {
90 using base_type = reactor_stream_socket_impl<
91 select_local_stream_socket,
92 select_traits,
93 select_local_stream_service,
94 select_local_stream_acceptor,
95 local_stream_socket::implementation,
96 corosio::local_endpoint>;
97 friend select_local_stream_service;
98
99 public:
100 166x explicit select_local_stream_socket(
101 select_local_stream_service& svc) noexcept
102 166x : base_type(svc)
103 {
104 166x }
105
106 2x native_handle_type release_socket() noexcept override
107 {
108 2x hook_ = {};
109 2x return this->do_release_socket();
110 }
111 };
112
113 // --- Datagram sockets ---
114
115 class select_udp_socket final
116 : public reactor_dgram_socket_impl<
117 select_udp_socket,
118 select_traits,
119 select_udp_service,
120 select_tcp_acceptor,
121 udp_socket::implementation,
122 endpoint>
123 {
124 using base_type = reactor_dgram_socket_impl<
125 select_udp_socket,
126 select_traits,
127 select_udp_service,
128 select_tcp_acceptor,
129 udp_socket::implementation,
130 endpoint>;
131 friend select_udp_service;
132
133 public:
134 191x explicit select_udp_socket(select_udp_service& svc) noexcept
135 191x : base_type(svc)
136 {
137 191x }
138
139 3x std::error_code shutdown(corosio::shutdown_type what) noexcept override
140 {
141 3x return this->do_shutdown(static_cast<int>(what));
142 }
143
144 2x native_handle_type release_socket() noexcept override
145 {
146 2x return this->do_release_socket();
147 }
148 };
149
150 class select_local_datagram_socket final
151 : public reactor_dgram_socket_impl<
152 select_local_datagram_socket,
153 select_traits,
154 select_local_datagram_service,
155 select_tcp_acceptor,
156 local_datagram_socket::implementation,
157 corosio::local_endpoint>
158 {
159 using base_type = reactor_dgram_socket_impl<
160 select_local_datagram_socket,
161 select_traits,
162 select_local_datagram_service,
163 select_tcp_acceptor,
164 local_datagram_socket::implementation,
165 corosio::local_endpoint>;
166 friend select_local_datagram_service;
167
168 public:
169 130x explicit select_local_datagram_socket(
170 select_local_datagram_service& svc) noexcept
171 130x : base_type(svc)
172 {
173 130x }
174
175 4x std::error_code shutdown(corosio::shutdown_type what) noexcept override
176 {
177 4x return this->do_shutdown(static_cast<int>(what));
178 }
179
180 ✗ std::error_code bind(corosio::local_endpoint ep) noexcept override
181 {
182 ✗ return this->do_bind(ep);
183 }
184
185 2x native_handle_type release_socket() noexcept override
186 {
187 2x return this->do_release_socket();
188 }
189 };
190
191 // --- Acceptors ---
192
193 class select_tcp_acceptor final
194 : public reactor_acceptor_impl<
195 select_tcp_acceptor,
196 select_traits,
197 select_tcp_acceptor_service,
198 select_tcp_socket,
199 tcp_acceptor::implementation,
200 endpoint>
201 {
202 using base_type = reactor_acceptor_impl<
203 select_tcp_acceptor,
204 select_traits,
205 select_tcp_acceptor_service,
206 select_tcp_socket,
207 tcp_acceptor::implementation,
208 endpoint>;
209 friend select_tcp_acceptor_service;
210
211 public:
212 292x explicit select_tcp_acceptor(select_tcp_acceptor_service& svc) noexcept
213 292x : base_type(svc)
214 {
215 292x }
216 };
217
218 class select_local_stream_acceptor final
219 : public reactor_acceptor_impl<
220 select_local_stream_acceptor,
221 select_traits,
222 select_local_stream_acceptor_service,
223 select_local_stream_socket,
224 local_stream_acceptor::implementation,
225 corosio::local_endpoint>
226 {
227 using base_type = reactor_acceptor_impl<
228 select_local_stream_acceptor,
229 select_traits,
230 select_local_stream_acceptor_service,
231 select_local_stream_socket,
232 local_stream_acceptor::implementation,
233 corosio::local_endpoint>;
234 friend select_local_stream_acceptor_service;
235
236 public:
237 54x explicit select_local_stream_acceptor(
238 select_local_stream_acceptor_service& svc) noexcept
239 54x : base_type(svc)
240 {
241 54x }
242 };
243
244 // --- Descriptors ---
245
246 class select_descriptor final
247 : public reactor_descriptor<
248 select_descriptor,
249 select_traits,
250 select_descriptor_service,
251 select_tcp_acceptor>
252 {
253 using base_type = reactor_descriptor<
254 select_descriptor,
255 select_traits,
256 select_descriptor_service,
257 select_tcp_acceptor>;
258 friend select_descriptor_service;
259
260 public:
261 29x explicit select_descriptor(select_descriptor_service& svc) noexcept
262 29x : base_type(svc)
263 {
264 29x }
265 };
266
267 // --- Services ---
268
269 class BOOST_COROSIO_DECL select_tcp_service final
270 : public reactor_tcp_service_impl<
271 select_tcp_service,
272 select_traits,
273 select_tcp_socket>
274 {
275 using base_type = reactor_tcp_service_impl<
276 select_tcp_service,
277 select_traits,
278 select_tcp_socket>;
279
280 public:
281 323x explicit select_tcp_service(capy::execution_context& ctx) : base_type(ctx)
282 {
283 323x }
284 };
285
286 class BOOST_COROSIO_DECL select_local_stream_service final
287 : public reactor_local_stream_service_impl<
288 select_local_stream_service,
289 select_traits,
290 select_local_stream_socket>
291 {
292 using base_type = reactor_local_stream_service_impl<
293 select_local_stream_service,
294 select_traits,
295 select_local_stream_socket>;
296
297 public:
298 100x explicit select_local_stream_service(capy::execution_context& ctx)
299 100x : base_type(ctx)
300 {
301 100x }
302 };
303
304 class BOOST_COROSIO_DECL select_udp_service final
305 : public reactor_udp_service_impl<
306 select_udp_service,
307 select_traits,
308 select_udp_socket>
309 {
310 using base_type = reactor_udp_service_impl<
311 select_udp_service,
312 select_traits,
313 select_udp_socket>;
314
315 public:
316 139x explicit select_udp_service(capy::execution_context& ctx) : base_type(ctx)
317 {
318 139x }
319 };
320
321 class BOOST_COROSIO_DECL select_local_datagram_service final
322 : public reactor_local_dgram_service_impl<
323 select_local_datagram_service,
324 select_traits,
325 select_local_datagram_socket>
326 {
327 using base_type = reactor_local_dgram_service_impl<
328 select_local_datagram_service,
329 select_traits,
330 select_local_datagram_socket>;
331
332 public:
333 76x explicit select_local_datagram_service(capy::execution_context& ctx)
334 76x : base_type(ctx)
335 {
336 76x }
337 };
338
339 class BOOST_COROSIO_DECL select_tcp_acceptor_service final
340 : public reactor_acceptor_service_impl<
341 select_tcp_acceptor_service,
342 select_traits,
343 tcp_acceptor_service,
344 select_tcp_acceptor,
345 select_tcp_service,
346 endpoint>
347 {
348 using base_type = reactor_acceptor_service_impl<
349 select_tcp_acceptor_service,
350 select_traits,
351 tcp_acceptor_service,
352 select_tcp_acceptor,
353 select_tcp_service,
354 endpoint>;
355
356 public:
357 264x explicit select_tcp_acceptor_service(capy::execution_context& ctx)
358 264x : base_type(ctx)
359 {
360 264x }
361 };
362
363 class BOOST_COROSIO_DECL select_local_stream_acceptor_service final
364 : public reactor_acceptor_service_impl<
365 select_local_stream_acceptor_service,
366 select_traits,
367 local_stream_acceptor_service,
368 select_local_stream_acceptor,
369 select_local_stream_service,
370 corosio::local_endpoint>
371 {
372 using base_type = reactor_acceptor_service_impl<
373 select_local_stream_acceptor_service,
374 select_traits,
375 local_stream_acceptor_service,
376 select_local_stream_acceptor,
377 select_local_stream_service,
378 corosio::local_endpoint>;
379
380 public:
381 45x explicit select_local_stream_acceptor_service(capy::execution_context& ctx)
382 45x : base_type(ctx)
383 {
384 45x }
385 };
386
387 class BOOST_COROSIO_DECL select_descriptor_service final
388 : public reactor_descriptor_service<
389 select_descriptor_service,
390 select_traits,
391 select_descriptor>
392 {
393 using base_type = reactor_descriptor_service<
394 select_descriptor_service,
395 select_traits,
396 select_descriptor>;
397
398 public:
399 28x explicit select_descriptor_service(capy::execution_context& ctx)
400 28x : base_type(ctx)
401 {
402 28x }
403 };
404
405 } // namespace boost::corosio::detail
406
407 #endif // BOOST_COROSIO_HAS_SELECT
408
409 #endif // BOOST_COROSIO_NATIVE_DETAIL_SELECT_SELECT_TYPES_HPP
410