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

100.0% Lines (134/134) 100.0% List of functions (90/90) 27.6% Branches (86/312)
reactor_service_finals.hpp
f(x) Functions (90)
Function Calls Lines Branches Blocks
std::__1::error_code boost::corosio::detail::do_open_socket<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket>(boost::corosio::detail::kqueue_local_datagram_socket*, int, int, int, bool) :49 43x 100.0% – 46.0% std::__1::error_code boost::corosio::detail::do_open_socket<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket>(boost::corosio::detail::kqueue_local_stream_socket*, int, int, int, bool) :49 26x 100.0% – 46.0% std::__1::error_code boost::corosio::detail::do_open_socket<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket>(boost::corosio::detail::kqueue_tcp_socket*, int, int, int, bool) :49 6544x 60.0% 28.6% 86.0% std::__1::error_code boost::corosio::detail::do_open_socket<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket>(boost::corosio::detail::kqueue_udp_socket*, int, int, int, bool) :49 150x 100.0% – 46.0% std::__1::error_code boost::corosio::detail::do_open_socket<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket>(boost::corosio::detail::select_local_datagram_socket*, int, int, int, bool) :49 41x 66.7% 11.6% 46.0% std::__1::error_code boost::corosio::detail::do_open_socket<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket>(boost::corosio::detail::select_local_stream_socket*, int, int, int, bool) :49 25x 66.7% 28.6% 46.0% std::__1::error_code boost::corosio::detail::do_open_socket<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket>(boost::corosio::detail::select_tcp_socket*, int, int, int, bool) :49 1681x 93.3% 64.3% 73.0% std::__1::error_code boost::corosio::detail::do_open_socket<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket>(boost::corosio::detail::select_udp_socket*, int, int, int, bool) :49 143x 73.3% 35.7% 60.0% std::__1::error_code boost::corosio::detail::do_assign_fd<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket>(boost::corosio::detail::kqueue_local_datagram_socket*, int, int, bool) :81 65x 100.0% – 80.0% std::__1::error_code boost::corosio::detail::do_assign_fd<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket>(boost::corosio::detail::kqueue_local_stream_socket*, int, int, bool) :81 80x 100.0% – 80.0% std::__1::error_code boost::corosio::detail::do_assign_fd<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket>(boost::corosio::detail::kqueue_tcp_socket*, int, int, bool) :81 9x 0.0% 0.0% 80.0% std::__1::error_code boost::corosio::detail::do_assign_fd<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket>(boost::corosio::detail::kqueue_udp_socket*, int, int, bool) :81 7x 100.0% – 80.0% std::__1::error_code boost::corosio::detail::do_assign_fd<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket>(boost::corosio::detail::select_local_datagram_socket*, int, int, bool) :81 63x 90.9% 23.2% 80.0% std::__1::error_code boost::corosio::detail::do_assign_fd<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket>(boost::corosio::detail::select_local_stream_socket*, int, int, bool) :81 76x 90.9% 57.1% 80.0% std::__1::error_code boost::corosio::detail::do_assign_fd<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket>(boost::corosio::detail::select_tcp_socket*, int, int, bool) :81 9x 100.0% 64.3% 80.0% std::__1::error_code boost::corosio::detail::do_assign_fd<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket>(boost::corosio::detail::select_udp_socket*, int, int, bool) :81 7x 0.0% 0.0% 80.0% std::__1::error_code boost::corosio::detail::do_open_acceptor<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_acceptor>(boost::corosio::detail::kqueue_local_stream_acceptor*, int, int, int, bool) :122 43x 100.0% – 66.0% std::__1::error_code boost::corosio::detail::do_open_acceptor<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_acceptor>(boost::corosio::detail::kqueue_tcp_acceptor*, int, int, int, bool) :122 2113x 69.2% 30.0% 83.0% std::__1::error_code boost::corosio::detail::do_open_acceptor<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_acceptor>(boost::corosio::detail::select_local_stream_acceptor*, int, int, int, bool) :122 41x 84.6% 25.0% 66.0% std::__1::error_code boost::corosio::detail::do_open_acceptor<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_acceptor>(boost::corosio::detail::select_tcp_acceptor*, int, int, int, bool) :122 252x 92.3% 70.0% 83.0% std::__1::error_code boost::corosio::detail::do_assign_acceptor_fd<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_acceptor>(boost::corosio::detail::kqueue_local_stream_acceptor*, int, bool) :150 3x 100.0% – 75.0% std::__1::error_code boost::corosio::detail::do_assign_acceptor_fd<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_acceptor>(boost::corosio::detail::kqueue_tcp_acceptor*, int, bool) :150 9x 0.0% 0.0% 75.0% std::__1::error_code boost::corosio::detail::do_assign_acceptor_fd<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_acceptor>(boost::corosio::detail::select_local_stream_acceptor*, int, bool) :150 3x 87.5% 30.0% 75.0% std::__1::error_code boost::corosio::detail::do_assign_acceptor_fd<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_acceptor>(boost::corosio::detail::select_tcp_acceptor*, int, bool) :150 8x 100.0% 70.0% 75.0% boost::corosio::detail::reactor_tcp_service_impl<boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket>::~reactor_tcp_service_impl() :182 758x 100.0% – 100.0% boost::corosio::detail::reactor_tcp_service_impl<boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket>::~reactor_tcp_service_impl() :182 292x 100.0% – 100.0% boost::corosio::detail::reactor_tcp_service_impl<boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket>::reactor_tcp_service_impl(boost::capy::execution_context&) :197 758x 100.0% – 100.0% boost::corosio::detail::reactor_tcp_service_impl<boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket>::reactor_tcp_service_impl(boost::capy::execution_context&) :197 292x 100.0% – 100.0% boost::corosio::detail::reactor_tcp_service_impl<boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket>::open_socket(boost::corosio::tcp_socket::implementation&, int, int, int) :206 6544x 100.0% – 100.0% boost::corosio::detail::reactor_tcp_service_impl<boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket>::open_socket(boost::corosio::tcp_socket::implementation&, int, int, int) :206 1681x 100.0% – 100.0% boost::corosio::detail::reactor_tcp_service_impl<boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket>::assign_socket(boost::corosio::tcp_socket::implementation&, int) :216 9x 0.0% – 100.0% boost::corosio::detail::reactor_tcp_service_impl<boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket>::assign_socket(boost::corosio::tcp_socket::implementation&, int) :216 9x 100.0% – 100.0% boost::corosio::detail::reactor_tcp_service_impl<boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket>::bind_socket(boost::corosio::tcp_socket::implementation&, boost::corosio::endpoint) :224 8x 0.0% – 100.0% boost::corosio::detail::reactor_tcp_service_impl<boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket>::bind_socket(boost::corosio::tcp_socket::implementation&, boost::corosio::endpoint) :224 8x 100.0% – 100.0% boost::corosio::detail::reactor_tcp_service_impl<boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket>::pre_shutdown(boost::corosio::detail::kqueue_tcp_socket*) :229 5x 0.0% – 100.0% boost::corosio::detail::reactor_tcp_service_impl<boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket>::pre_shutdown(boost::corosio::detail::select_tcp_socket*) :229 4x 100.0% – 100.0% boost::corosio::detail::reactor_tcp_service_impl<boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket>::pre_destroy(boost::corosio::detail::kqueue_tcp_socket*) :234 19922x 100.0% – 100.0% boost::corosio::detail::reactor_tcp_service_impl<boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket>::pre_destroy(boost::corosio::detail::select_tcp_socket*) :234 5024x 100.0% – 100.0% boost::corosio::detail::reactor_local_stream_service_impl<boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket>::~reactor_local_stream_service_impl() :245 103x 100.0% – 100.0% boost::corosio::detail::reactor_local_stream_service_impl<boost::corosio::detail::select_local_stream_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket>::~reactor_local_stream_service_impl() :245 99x 100.0% – 100.0% boost::corosio::detail::reactor_local_stream_service_impl<boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket>::reactor_local_stream_service_impl(boost::capy::execution_context&) :260 103x 100.0% – 100.0% boost::corosio::detail::reactor_local_stream_service_impl<boost::corosio::detail::select_local_stream_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket>::reactor_local_stream_service_impl(boost::capy::execution_context&) :260 99x 100.0% – 100.0% boost::corosio::detail::reactor_local_stream_service_impl<boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket>::open_socket(boost::corosio::local_stream_socket::implementation&, int, int, int) :269 26x 100.0% – 100.0% boost::corosio::detail::reactor_local_stream_service_impl<boost::corosio::detail::select_local_stream_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket>::open_socket(boost::corosio::local_stream_socket::implementation&, int, int, int) :269 25x 100.0% – 100.0% boost::corosio::detail::reactor_local_stream_service_impl<boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket>::assign_socket(boost::corosio::local_stream_socket::implementation&, int) :279 80x 100.0% – 100.0% boost::corosio::detail::reactor_local_stream_service_impl<boost::corosio::detail::select_local_stream_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket>::assign_socket(boost::corosio::local_stream_socket::implementation&, int) :279 76x 100.0% – 100.0% boost::corosio::detail::reactor_udp_service_impl<boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket>::~reactor_udp_service_impl() :293 111x 100.0% – 100.0% boost::corosio::detail::reactor_udp_service_impl<boost::corosio::detail::select_udp_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket>::~reactor_udp_service_impl() :293 107x 100.0% – 100.0% boost::corosio::detail::reactor_udp_service_impl<boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket>::reactor_udp_service_impl(boost::capy::execution_context&) :308 111x 100.0% – 100.0% boost::corosio::detail::reactor_udp_service_impl<boost::corosio::detail::select_udp_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket>::reactor_udp_service_impl(boost::capy::execution_context&) :308 107x 100.0% – 100.0% boost::corosio::detail::reactor_udp_service_impl<boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket>::open_datagram_socket(boost::corosio::udp_socket::implementation&, int, int, int) :317 150x 100.0% – 100.0% boost::corosio::detail::reactor_udp_service_impl<boost::corosio::detail::select_udp_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket>::open_datagram_socket(boost::corosio::udp_socket::implementation&, int, int, int) :317 143x 100.0% – 100.0% boost::corosio::detail::reactor_udp_service_impl<boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket>::assign_socket(boost::corosio::udp_socket::implementation&, int) :327 7x 100.0% – 100.0% boost::corosio::detail::reactor_udp_service_impl<boost::corosio::detail::select_udp_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket>::assign_socket(boost::corosio::udp_socket::implementation&, int) :327 7x 100.0% – 100.0% boost::corosio::detail::reactor_udp_service_impl<boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket>::bind_datagram(boost::corosio::udp_socket::implementation&, boost::corosio::endpoint) :335 94x 100.0% – 100.0% boost::corosio::detail::reactor_udp_service_impl<boost::corosio::detail::select_udp_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket>::bind_datagram(boost::corosio::udp_socket::implementation&, boost::corosio::endpoint) :335 89x 100.0% – 100.0% boost::corosio::detail::reactor_local_dgram_service_impl<boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket>::~reactor_local_dgram_service_impl() :346 74x 100.0% – 100.0% boost::corosio::detail::reactor_local_dgram_service_impl<boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket>::~reactor_local_dgram_service_impl() :346 72x 100.0% – 100.0% boost::corosio::detail::reactor_local_dgram_service_impl<boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket>::reactor_local_dgram_service_impl(boost::capy::execution_context&) :361 74x 100.0% – 100.0% boost::corosio::detail::reactor_local_dgram_service_impl<boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket>::reactor_local_dgram_service_impl(boost::capy::execution_context&) :361 72x 100.0% – 100.0% boost::corosio::detail::reactor_local_dgram_service_impl<boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket>::open_socket(boost::corosio::local_datagram_socket::implementation&, int, int, int) :370 43x 100.0% – 100.0% boost::corosio::detail::reactor_local_dgram_service_impl<boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket>::open_socket(boost::corosio::local_datagram_socket::implementation&, int, int, int) :370 41x 100.0% – 100.0% boost::corosio::detail::reactor_local_dgram_service_impl<boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket>::assign_socket(boost::corosio::local_datagram_socket::implementation&, int) :380 65x 100.0% – 100.0% boost::corosio::detail::reactor_local_dgram_service_impl<boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket>::assign_socket(boost::corosio::local_datagram_socket::implementation&, int) :380 63x 100.0% – 100.0% boost::corosio::detail::reactor_local_dgram_service_impl<boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket>::bind_socket(boost::corosio::local_datagram_socket::implementation&, boost::corosio::local_endpoint) :388 30x 100.0% – 100.0% boost::corosio::detail::reactor_local_dgram_service_impl<boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket>::bind_socket(boost::corosio::local_datagram_socket::implementation&, boost::corosio::local_endpoint) :388 28x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::kqueue_local_stream_acceptor_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::local_endpoint>::~reactor_acceptor_service_impl() :407 47x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::kqueue_tcp_acceptor_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::detail::kqueue_tcp_service, boost::corosio::endpoint>::~reactor_acceptor_service_impl() :407 690x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::select_local_stream_acceptor_service, boost::corosio::detail::select_traits, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::detail::select_local_stream_service, boost::corosio::local_endpoint>::~reactor_acceptor_service_impl() :407 45x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::select_tcp_acceptor_service, boost::corosio::detail::select_traits, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::select_tcp_acceptor, boost::corosio::detail::select_tcp_service, boost::corosio::endpoint>::~reactor_acceptor_service_impl() :407 237x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::kqueue_local_stream_acceptor_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::local_endpoint>::reactor_acceptor_service_impl(boost::capy::execution_context&) :424 47x 100.0% – 50.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::kqueue_tcp_acceptor_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::detail::kqueue_tcp_service, boost::corosio::endpoint>::reactor_acceptor_service_impl(boost::capy::execution_context&) :424 690x 100.0% 50.0% 50.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::select_local_stream_acceptor_service, boost::corosio::detail::select_traits, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::detail::select_local_stream_service, boost::corosio::local_endpoint>::reactor_acceptor_service_impl(boost::capy::execution_context&) :424 45x 100.0% 25.0% 50.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::select_tcp_acceptor_service, boost::corosio::detail::select_traits, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::select_tcp_acceptor, boost::corosio::detail::select_tcp_service, boost::corosio::endpoint>::reactor_acceptor_service_impl(boost::capy::execution_context&) :424 237x 100.0% 50.0% 50.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::kqueue_local_stream_acceptor_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::local_endpoint>::open_acceptor_socket(boost::corosio::local_stream_acceptor::implementation&, int, int, int) :438 43x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::kqueue_tcp_acceptor_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::detail::kqueue_tcp_service, boost::corosio::endpoint>::open_acceptor_socket(boost::corosio::tcp_acceptor::implementation&, int, int, int) :438 2113x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::select_local_stream_acceptor_service, boost::corosio::detail::select_traits, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::detail::select_local_stream_service, boost::corosio::local_endpoint>::open_acceptor_socket(boost::corosio::local_stream_acceptor::implementation&, int, int, int) :438 41x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::select_tcp_acceptor_service, boost::corosio::detail::select_traits, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::select_tcp_acceptor, boost::corosio::detail::select_tcp_service, boost::corosio::endpoint>::open_acceptor_socket(boost::corosio::tcp_acceptor::implementation&, int, int, int) :438 252x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::kqueue_local_stream_acceptor_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::local_endpoint>::assign_socket(boost::corosio::local_stream_acceptor::implementation&, int) :449 3x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::kqueue_tcp_acceptor_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::detail::kqueue_tcp_service, boost::corosio::endpoint>::assign_socket(boost::corosio::tcp_acceptor::implementation&, int) :449 9x 0.0% – 100.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::select_local_stream_acceptor_service, boost::corosio::detail::select_traits, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::detail::select_local_stream_service, boost::corosio::local_endpoint>::assign_socket(boost::corosio::local_stream_acceptor::implementation&, int) :449 3x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::select_tcp_acceptor_service, boost::corosio::detail::select_traits, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::select_tcp_acceptor, boost::corosio::detail::select_tcp_service, boost::corosio::endpoint>::assign_socket(boost::corosio::tcp_acceptor::implementation&, int) :449 8x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::kqueue_local_stream_acceptor_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::local_endpoint>::bind_acceptor(boost::corosio::local_stream_acceptor::implementation&, boost::corosio::local_endpoint) :458 37x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::kqueue_tcp_acceptor_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::detail::kqueue_tcp_service, boost::corosio::endpoint>::bind_acceptor(boost::corosio::tcp_acceptor::implementation&, boost::corosio::endpoint) :458 2102x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::select_local_stream_acceptor_service, boost::corosio::detail::select_traits, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::detail::select_local_stream_service, boost::corosio::local_endpoint>::bind_acceptor(boost::corosio::local_stream_acceptor::implementation&, boost::corosio::local_endpoint) :458 35x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::select_tcp_acceptor_service, boost::corosio::detail::select_traits, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::select_tcp_acceptor, boost::corosio::detail::select_tcp_service, boost::corosio::endpoint>::bind_acceptor(boost::corosio::tcp_acceptor::implementation&, boost::corosio::endpoint) :458 238x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::kqueue_local_stream_acceptor_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::local_endpoint>::listen_acceptor(boost::corosio::local_stream_acceptor::implementation&, int) :463 29x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::kqueue_tcp_acceptor_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::detail::kqueue_tcp_service, boost::corosio::endpoint>::listen_acceptor(boost::corosio::tcp_acceptor::implementation&, int) :463 2085x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::select_local_stream_acceptor_service, boost::corosio::detail::select_traits, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::detail::select_local_stream_service, boost::corosio::local_endpoint>::listen_acceptor(boost::corosio::local_stream_acceptor::implementation&, int) :463 28x 100.0% – 100.0% boost::corosio::detail::reactor_acceptor_service_impl<boost::corosio::detail::select_tcp_acceptor_service, boost::corosio::detail::select_traits, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::select_tcp_acceptor, boost::corosio::detail::select_tcp_service, boost::corosio::endpoint>::listen_acceptor(boost::corosio::tcp_acceptor::implementation&, int) :463 226x 100.0% – 100.0%
Line Branch 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_SERVICE_FINALS_HPP
11 #define BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_SERVICE_FINALS_HPP
12
13 /* Parameterized service implementation bases for reactor backends.
14
15 One template per protocol (TCP, local stream, UDP, local datagram,
16 acceptor). Named per-backend classes (e.g. epoll_tcp_service) inherit
17 from these as final. The Derived parameter (CRTP) flows through to
18 reactor_socket_service so construct() creates the correct named type.
19 */
20
21 #include <boost/corosio/native/detail/reactor/reactor_socket_finals.hpp>
22 #include <boost/corosio/native/detail/reactor/reactor_socket_service.hpp>
23 #include <boost/corosio/native/detail/reactor/reactor_acceptor_service.hpp>
24 #include <boost/corosio/detail/tcp_service.hpp>
25 #include <boost/corosio/detail/tcp_acceptor_service.hpp>
26 #include <boost/corosio/detail/udp_service.hpp>
27 #include <boost/corosio/detail/local_stream_service.hpp>
28 #include <boost/corosio/detail/local_stream_acceptor_service.hpp>
29 #include <boost/corosio/detail/local_datagram_service.hpp>
30
31 #include <boost/corosio/native/detail/endpoint_convert.hpp>
32 #include <boost/corosio/native/detail/make_err.hpp>
33 #include <boost/corosio/native/detail/validate_fd.hpp>
34
35 #include <system_error>
36 #include <type_traits>
37
38 #include <sys/socket.h>
39 #include <unistd.h>
40
41 namespace boost::corosio::detail {
42
43 // ============================================================
44 // Shared socket creation helpers
45 // ============================================================
46
47 template<class Traits, class SocketFinal>
48 std::error_code
49 8653x do_open_socket(
50 SocketFinal* socket_impl,
51 int family,
52 int type,
53 int protocol,
54 bool is_ip) noexcept
55 {
56 8653x socket_impl->close_socket();
57
58 8653x int fd = Traits::create_socket(family, type, protocol);
59
5/16
✓ Branch 0 taken 6626 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1889 times.
✓ Branch 3 taken 1 time.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 135 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
8653x if (fd < 0)
60
2/16
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
3x return make_err(errno);
61
62
5/16
✓ Branch 0 taken 6557 times.
✓ Branch 1 taken 69 times.
✓ Branch 2 taken 1823 times.
✓ Branch 3 taken 66 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 135 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
8650x std::error_code ec = is_ip ? Traits::configure_ip_socket(fd, family)
63 135x : Traits::configure_local_socket(fd);
64
65
5/16
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 6622 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 1884 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 135 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
8650x if (ec)
66 {
67
2/16
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
9x ::close(fd);
68 9x return ec;
69 }
70
71
5/16
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 6621 times.
✓ Branch 2 taken 1 time.
✓ Branch 3 taken 1883 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 135 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
8641x if (auto ec = socket_impl->init_and_register(fd))
72 {
73
2/16
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
2x ::close(fd);
74 2x return ec;
75 }
76 8639x return {};
77 8653x }
78
79 template<class Traits, class SocketFinal>
80 std::error_code
81 316x do_assign_fd(
82 SocketFinal* socket_impl, int fd, int expected_type, bool is_ip) noexcept
83 {
84 // The public assign() guarantees the object is closed.
85
6/16
✓ Branch 0 taken 14 times.
✓ Branch 1 taken 140 times.
✓ Branch 2 taken 18 times.
✓ Branch 3 taken 137 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 4 times.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
316x if (auto ec = validate_socket_fd(fd, expected_type, is_ip))
86 36x return ec;
87
88 // Adopt-only: do not mutate the caller's fd flags. Callers
89 // pass fds they have already configured (e.g., from socketpair
90 // or SCM_RIGHTS). Only non-mutating validation is performed.
91
4/16
✗ Branch 0 not taken.
✓ Branch 1 taken 140 times.
✓ Branch 2 taken 1 time.
✓ Branch 3 taken 136 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
280x if (auto ec = Traits::validate_assigned_fd(fd))
92 1x return ec;
93
94
4/16
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 139 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 136 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
279x if (auto ec = socket_impl->init_and_register(fd))
95 1x return ec;
96
97 // Best-effort: refresh endpoint caches.
98 using endpoint_type =
99 std::remove_cvref_t<decltype(socket_impl->local_endpoint())>;
100
101 278x endpoint_type local_ep{};
102 278x sockaddr_storage local_storage{};
103 278x socklen_t local_len = sizeof(local_storage);
104
6/32
✓ Branch 0 taken 139 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 139 times.
✓ Branch 4 taken 136 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 136 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✓ Branch 20 taken 3 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 3 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
278x if (::getsockname(
105 278x fd, reinterpret_cast<sockaddr*>(&local_storage), &local_len) == 0)
106 278x local_ep = from_sockaddr_as(local_storage, local_len, endpoint_type{});
107
108 278x endpoint_type remote_ep{};
109 278x sockaddr_storage peer_storage{};
110 278x socklen_t peer_len = sizeof(peer_storage);
111
8/32
✓ Branch 0 taken 139 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 139 times.
✓ Branch 4 taken 136 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 134 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✓ Branch 20 taken 3 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 2 times.
✓ Branch 23 taken 1 time.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
278x if (::getpeername(
112 278x fd, reinterpret_cast<sockaddr*>(&peer_storage), &peer_len) == 0)
113 274x remote_ep = from_sockaddr_as(peer_storage, peer_len, endpoint_type{});
114
115 278x socket_impl->set_endpoints(local_ep, remote_ep);
116
117 278x return {};
118 316x }
119
120 template<class Traits, class AccFinal>
121 std::error_code
122 2449x do_open_acceptor(
123 AccFinal* acc_impl, int family, int type, int protocol, bool is_ip) noexcept
124 {
125 2449x acc_impl->close_socket();
126
127 2449x int fd = Traits::create_socket(family, type, protocol);
128
4/8
✓ Branch 0 taken 2153 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 290 times.
✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
2449x if (fd < 0)
129
2/8
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
6x return make_err(errno);
130
131
4/8
✓ Branch 0 taken 2111 times.
✓ Branch 1 taken 42 times.
✓ Branch 2 taken 250 times.
✓ Branch 3 taken 40 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
2443x std::error_code ec = is_ip ? Traits::configure_ip_acceptor(fd, family)
132 82x : Traits::configure_local_socket(fd);
133
134
4/8
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2151 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 285 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
2443x if (ec)
135 {
136
2/8
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
7x ::close(fd);
137 7x return ec;
138 }
139
140 2436x acc_impl->init_acceptor_fd(fd);
141 2436x return {};
142 2449x }
143
144 // Acceptor twin of do_assign_fd: always SOCK_STREAM, and refreshes
145 // only the local endpoint because listeners have no peer. Listen
146 // state is not verified; accept() surfaces the error naturally if
147 // the descriptor is not listening.
148 template<class Traits, class AccFinal>
149 std::error_code
150 23x do_assign_acceptor_fd(AccFinal* acc_impl, int fd, bool is_ip) noexcept
151 {
152 // The public assign() guarantees the object is closed.
153
4/8
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 4 times.
✓ Branch 3 taken 7 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
23x if (auto ec = validate_socket_fd(fd, SOCK_STREAM, is_ip))
154 8x return ec;
155
156
3/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 1 time.
✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
15x if (auto ec = Traits::validate_assigned_fd(fd))
157 1x return ec;
158
159
3/8
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
14x if (auto ec = acc_impl->init_and_register(fd))
160 1x return ec;
161
162 using endpoint_type =
163 std::remove_cvref_t<decltype(acc_impl->local_endpoint())>;
164
165 13x endpoint_type local_ep{};
166 13x sockaddr_storage local_storage{};
167 13x socklen_t local_len = sizeof(local_storage);
168
4/16
✓ Branch 0 taken 7 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 7 times.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
13x if (::getsockname(
169 13x fd, reinterpret_cast<sockaddr*>(&local_storage), &local_len) == 0)
170 13x local_ep = from_sockaddr_as(local_storage, local_len, endpoint_type{});
171
172 13x acc_impl->set_local_endpoint(local_ep);
173
174 13x return {};
175 23x }
176
177 // ============================================================
178 // TCP service
179 // ============================================================
180
181 template<class Derived, class Traits, class SocketFinal>
182 class reactor_tcp_service_impl
183 : public reactor_socket_service<
184 Derived,
185 tcp_service,
186 typename Traits::scheduler_type,
187 SocketFinal>
188 {
189 using base_service = reactor_socket_service<
190 Derived,
191 tcp_service,
192 typename Traits::scheduler_type,
193 SocketFinal>;
194 friend Derived;
195 friend base_service;
196
197 1050x explicit reactor_tcp_service_impl(capy::execution_context& ctx)
198 1050x : base_service(ctx)
199 1050x {
200 1050x }
201
202 public:
203 static constexpr bool needs_park_notification =
204 Traits::needs_park_notification;
205
206 8225x std::error_code open_socket(
207 tcp_socket::implementation& impl,
208 int family,
209 int type,
210 int protocol) override
211 {
212 8225x return do_open_socket<Traits>(
213 8225x static_cast<SocketFinal*>(&impl), family, type, protocol, true);
214 }
215
216 18x std::error_code assign_socket(
217 tcp_socket::implementation& impl, native_handle_type fd) override
218 {
219 18x return do_assign_fd<Traits>(
220 18x static_cast<SocketFinal*>(&impl), fd, SOCK_STREAM, true);
221 }
222
223 std::error_code
224 16x bind_socket(tcp_socket::implementation& impl, endpoint ep) override
225 {
226 16x return static_cast<SocketFinal*>(&impl)->do_bind(ep);
227 }
228
229 9x void pre_shutdown(SocketFinal* impl) noexcept
230 {
231 9x impl->hook_.pre_shutdown(impl->native_handle());
232 9x }
233
234 24946x void pre_destroy(SocketFinal* impl) noexcept
235 {
236 24946x impl->hook_.pre_destroy(impl->native_handle());
237 24946x }
238 };
239
240 // ============================================================
241 // Local stream service
242 // ============================================================
243
244 template<class Derived, class Traits, class SocketFinal>
245 class reactor_local_stream_service_impl
246 : public reactor_socket_service<
247 Derived,
248 local_stream_service,
249 typename Traits::scheduler_type,
250 SocketFinal>
251 {
252 using base_service = reactor_socket_service<
253 Derived,
254 local_stream_service,
255 typename Traits::scheduler_type,
256 SocketFinal>;
257 friend Derived;
258 friend base_service;
259
260 202x explicit reactor_local_stream_service_impl(capy::execution_context& ctx)
261 202x : base_service(ctx)
262 202x {
263 202x }
264
265 public:
266 static constexpr bool needs_park_notification =
267 Traits::needs_park_notification;
268
269 51x std::error_code open_socket(
270 local_stream_socket::implementation& impl,
271 int family,
272 int type,
273 int protocol) override
274 {
275 51x return do_open_socket<Traits>(
276 51x static_cast<SocketFinal*>(&impl), family, type, protocol, false);
277 }
278
279 156x std::error_code assign_socket(
280 local_stream_socket::implementation& impl,
281 native_handle_type fd) override
282 {
283 156x return do_assign_fd<Traits>(
284 156x static_cast<SocketFinal*>(&impl), fd, SOCK_STREAM, false);
285 }
286 };
287
288 // ============================================================
289 // UDP service
290 // ============================================================
291
292 template<class Derived, class Traits, class SocketFinal>
293 class reactor_udp_service_impl
294 : public reactor_socket_service<
295 Derived,
296 udp_service,
297 typename Traits::scheduler_type,
298 SocketFinal>
299 {
300 using base_service = reactor_socket_service<
301 Derived,
302 udp_service,
303 typename Traits::scheduler_type,
304 SocketFinal>;
305 friend Derived;
306 friend base_service;
307
308 218x explicit reactor_udp_service_impl(capy::execution_context& ctx)
309 218x : base_service(ctx)
310 218x {
311 218x }
312
313 public:
314 static constexpr bool needs_park_notification =
315 Traits::needs_park_notification;
316
317 293x std::error_code open_datagram_socket(
318 udp_socket::implementation& impl,
319 int family,
320 int type,
321 int protocol) override
322 {
323 293x return do_open_socket<Traits>(
324 293x static_cast<SocketFinal*>(&impl), family, type, protocol, true);
325 }
326
327 14x std::error_code assign_socket(
328 udp_socket::implementation& impl, native_handle_type fd) override
329 {
330 14x return do_assign_fd<Traits>(
331 14x static_cast<SocketFinal*>(&impl), fd, SOCK_DGRAM, true);
332 }
333
334 std::error_code
335 183x bind_datagram(udp_socket::implementation& impl, endpoint ep) override
336 {
337 183x return static_cast<SocketFinal*>(&impl)->do_bind(ep);
338 }
339 };
340
341 // ============================================================
342 // Local datagram service
343 // ============================================================
344
345 template<class Derived, class Traits, class SocketFinal>
346 class reactor_local_dgram_service_impl
347 : public reactor_socket_service<
348 Derived,
349 local_datagram_service,
350 typename Traits::scheduler_type,
351 SocketFinal>
352 {
353 using base_service = reactor_socket_service<
354 Derived,
355 local_datagram_service,
356 typename Traits::scheduler_type,
357 SocketFinal>;
358 friend Derived;
359 friend base_service;
360
361 146x explicit reactor_local_dgram_service_impl(capy::execution_context& ctx)
362 146x : base_service(ctx)
363 146x {
364 146x }
365
366 public:
367 static constexpr bool needs_park_notification =
368 Traits::needs_park_notification;
369
370 84x std::error_code open_socket(
371 local_datagram_socket::implementation& impl,
372 int family,
373 int type,
374 int protocol) override
375 {
376 84x return do_open_socket<Traits>(
377 84x static_cast<SocketFinal*>(&impl), family, type, protocol, false);
378 }
379
380 128x std::error_code assign_socket(
381 local_datagram_socket::implementation& impl,
382 native_handle_type fd) override
383 {
384 128x return do_assign_fd<Traits>(
385 128x static_cast<SocketFinal*>(&impl), fd, SOCK_DGRAM, false);
386 }
387
388 58x std::error_code bind_socket(
389 local_datagram_socket::implementation& impl,
390 corosio::local_endpoint ep) override
391 {
392 58x return static_cast<SocketFinal*>(&impl)->do_bind(ep);
393 }
394 };
395
396 // ============================================================
397 // Acceptor service
398 // ============================================================
399
400 template<
401 class Derived,
402 class Traits,
403 class ServiceBase,
404 class AccFinal,
405 class StreamServiceFinal,
406 class Endpoint>
407 class reactor_acceptor_service_impl
408 : public reactor_acceptor_service<
409 Derived,
410 ServiceBase,
411 typename Traits::scheduler_type,
412 AccFinal,
413 StreamServiceFinal>
414 {
415 using base_service = reactor_acceptor_service<
416 Derived,
417 ServiceBase,
418 typename Traits::scheduler_type,
419 AccFinal,
420 StreamServiceFinal>;
421 friend Derived;
422 friend base_service;
423
424 1019x explicit reactor_acceptor_service_impl(capy::execution_context& ctx)
425 1019x : base_service(ctx)
426 1019x {
427 // The acceptor hands accepted fds to the stream service, so
428 // get-or-create it: with services created on first use it may
429 // not exist yet when the acceptor service comes up.
430 1019x this->stream_svc_ =
431
2/8
✓ Branch 0 taken 737 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 282 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
1019x &this->ctx_.template use_service<StreamServiceFinal>();
432 1019x }
433
434 public:
435 static constexpr bool needs_park_notification =
436 Traits::needs_park_notification;
437
438 2449x std::error_code open_acceptor_socket(
439 typename AccFinal::impl_base_type& impl,
440 int family,
441 int type,
442 int protocol) override
443 {
444 2449x return do_open_acceptor<Traits>(
445 2449x static_cast<AccFinal*>(&impl), family, type, protocol,
446 std::is_same_v<Endpoint, endpoint>);
447 }
448
449 23x std::error_code assign_socket(
450 typename AccFinal::impl_base_type& impl, native_handle_type fd) override
451 {
452 23x return do_assign_acceptor_fd<Traits>(
453 23x static_cast<AccFinal*>(&impl), fd,
454 std::is_same_v<Endpoint, endpoint>);
455 }
456
457 std::error_code
458 2412x bind_acceptor(typename AccFinal::impl_base_type& impl, Endpoint ep) override
459 {
460 2412x return static_cast<AccFinal*>(&impl)->do_bind(ep);
461 }
462
463 2368x std::error_code listen_acceptor(
464 typename AccFinal::impl_base_type& impl, int backlog) override
465 {
466 2368x return static_cast<AccFinal*>(&impl)->do_listen(backlog);
467 }
468 };
469
470 } // namespace boost::corosio::detail
471
472 #endif // BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_SERVICE_FINALS_HPP
473