include/boost/corosio/native/detail/epoll/epoll_types.hpp

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