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

100.0% Lines (18/18) 93.8% List of functions (30/32)
reactor_socket_finals.hpp
f(x) Functions (32)
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&) :71 17x 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&) :71 8180x 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&) :71 17x 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&) :71 7511x 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() :82 17x 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() :82 8180x 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() :82 17x 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() :82 7511x 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) :84 0 0.0% 0.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) :84 32x 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) :84 0 0.0% 0.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) :84 28x 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() :93 59x 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() :93 24522x 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() :93 59x 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() :93 22553x 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&) :131 17x 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&) :131 43x 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&) :131 17x 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&) :131 43x 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() :139 17x 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() :139 43x 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() :139 17x 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() :139 43x 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&) :170 6x 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&) :170 96x 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&) :170 6x 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&) :170 77x 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() :178 6x 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() :178 96x 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() :178 6x 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() :178 77x 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<class Derived, class Traits, class Service,
56 class AcceptorType, class ImplBase, class Endpoint>
57 class reactor_stream_socket_impl
58 : public reactor_stream_socket<
59 Derived,
60 Service,
61 reactor_stream_connect_op<Traits, Derived, AcceptorType, Endpoint>,
62 reactor_stream_read_op<Traits, Derived, AcceptorType, Endpoint>,
63 reactor_stream_write_op<Traits, Derived, AcceptorType, Endpoint>,
64 typename Traits::desc_state_type,
65 ImplBase,
66 Endpoint>
67 {
68 friend Derived;
69 friend Service;
70
71 15725x explicit reactor_stream_socket_impl(Service& svc) noexcept
72 15725x : reactor_stream_socket_impl::reactor_stream_socket(svc)
73 {
74 15725x }
75
76 public:
77 using impl_base_type = ImplBase;
78
79 // Per-socket hook state (e.g., kqueue SO_LINGER tracking).
80 [[no_unique_address]] typename Traits::stream_socket_hook hook_;
81
82 15725x ~reactor_stream_socket_impl() override = default;
83
84 60x std::error_code set_option(
85 int level, int optname,
86 void const* data, std::size_t size) noexcept override
87 {
88 60x return hook_.on_set_option(this->fd_, level, optname, data, size);
89 }
90
91 // Shadows reactor_stream_socket::close_socket so the hook fires on
92 // every fd close path.
93 47193x void close_socket() noexcept
94 {
95 47193x hook_.pre_shutdown(this->fd_);
96 47193x this->do_close_socket();
97 47193x }
98 };
99
100 // ============================================================
101 // Datagram socket implementation base
102 // ============================================================
103
104 /** Intermediate base for reactor datagram sockets.
105
106 @tparam Derived The named final class (CRTP self).
107 @tparam Traits Backend traits.
108 @tparam Service The concrete datagram service type.
109 @tparam AcceptorType The concrete acceptor type (placeholder for op base).
110 @tparam ImplBase The public vtable base.
111 @tparam Endpoint endpoint or local_endpoint.
112 */
113 template<class Derived, class Traits, class Service,
114 class AcceptorType, class ImplBase, class Endpoint>
115 class reactor_dgram_socket_impl
116 : public reactor_datagram_socket<
117 Derived,
118 Service,
119 reactor_dgram_connect_op<Traits, Derived, AcceptorType, Endpoint>,
120 reactor_dgram_send_to_op<Traits, Derived, AcceptorType, Endpoint>,
121 reactor_dgram_recv_from_op<Traits, Derived, AcceptorType, Endpoint>,
122 reactor_dgram_send_op<Traits, Derived, AcceptorType, Endpoint>,
123 reactor_dgram_recv_op<Traits, Derived, AcceptorType, Endpoint>,
124 typename Traits::desc_state_type,
125 ImplBase,
126 Endpoint>
127 {
128 friend Derived;
129 friend Service;
130
131 120x explicit reactor_dgram_socket_impl(Service& svc) noexcept
132 120x : reactor_dgram_socket_impl::reactor_datagram_socket(svc)
133 {
134 120x }
135
136 public:
137 using impl_base_type = ImplBase;
138
139 120x ~reactor_dgram_socket_impl() override = default;
140 };
141
142 // ============================================================
143 // Acceptor implementation base
144 // ============================================================
145
146 /** Intermediate base for reactor stream acceptors.
147
148 @tparam Derived The named final class (CRTP self).
149 @tparam Traits Backend traits.
150 @tparam Service The concrete acceptor service type.
151 @tparam SocketFinal The concrete stream socket type (for accept).
152 @tparam AccImplBase The public vtable base.
153 @tparam Endpoint endpoint or local_endpoint.
154 */
155 template<class Derived, class Traits, class Service,
156 class SocketFinal, class AccImplBase, class Endpoint>
157 class reactor_acceptor_impl
158 : public reactor_acceptor<
159 Derived,
160 Service,
161 reactor_stream_base_op<Traits, SocketFinal, Derived, Endpoint>,
162 reactor_stream_accept_op<Traits, SocketFinal, Derived, Endpoint>,
163 typename Traits::desc_state_type,
164 AccImplBase,
165 Endpoint>
166 {
167 friend Derived;
168 friend Service;
169
170 185x explicit reactor_acceptor_impl(Service& svc) noexcept
171 185x : reactor_acceptor_impl::reactor_acceptor(svc)
172 {
173 185x }
174
175 public:
176 using impl_base_type = AccImplBase;
177
178 185x ~reactor_acceptor_impl() override = default;
179
180 std::coroutine_handle<> accept(
181 std::coroutine_handle<>,
182 capy::executor_ref,
183 std::stop_token,
184 std::error_code*,
185 io_object::implementation**) override;
186 };
187
188 } // namespace boost::corosio::detail
189
190 #endif // BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_SOCKET_FINALS_HPP
191