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

82.9% Lines (330/398) 96.6% List of functions (56/58)
reactor_service_finals.hpp
f(x) Functions (58)
Function Calls Lines Blocks
std::error_code boost::corosio::detail::do_open_socket<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint> >(boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint>*, int, int, int, bool) :45 10x 75.0% 76.0% std::error_code boost::corosio::detail::do_open_socket<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::udp_socket::implementation, boost::corosio::endpoint> >(boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::udp_socket::implementation, boost::corosio::endpoint>*, int, int, int, bool) :45 40x 66.7% 76.0% std::error_code boost::corosio::detail::do_open_socket<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint> >(boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>*, int, int, int, bool) :45 4x 75.0% 76.0% std::error_code boost::corosio::detail::do_open_socket<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint> >(boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>*, int, int, int, bool) :45 2988x 66.7% 76.0% std::error_code boost::corosio::detail::do_open_socket<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint> >(boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint>*, int, int, int, bool) :45 10x 75.0% 76.0% std::error_code boost::corosio::detail::do_open_socket<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::select_traits, boost::corosio::udp_socket::implementation, boost::corosio::endpoint> >(boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::select_traits, boost::corosio::udp_socket::implementation, boost::corosio::endpoint>*, int, int, int, bool) :45 40x 66.7% 76.0% std::error_code boost::corosio::detail::do_open_socket<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint> >(boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>*, int, int, int, bool) :45 4x 75.0% 76.0% std::error_code boost::corosio::detail::do_open_socket<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint> >(boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>*, int, int, int, bool) :45 2094x 66.7% 76.0% std::error_code boost::corosio::detail::do_assign_fd<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint> >(boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint>*, int, int) :72 6x 85.3% 82.0% std::error_code boost::corosio::detail::do_assign_fd<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint> >(boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>*, int, int) :72 8x 85.3% 82.0% std::error_code boost::corosio::detail::do_assign_fd<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint> >(boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint>*, int, int) :72 6x 85.3% 82.0% std::error_code boost::corosio::detail::do_assign_fd<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint> >(boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>*, int, int) :72 8x 85.3% 82.0% std::error_code boost::corosio::detail::do_open_acceptor<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint> >(boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>*, int, int, int, bool) :143 6x 75.0% 76.0% std::error_code boost::corosio::detail::do_open_acceptor<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint> >(boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>*, int, int, int, bool) :143 83x 66.7% 76.0% std::error_code boost::corosio::detail::do_open_acceptor<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint> >(boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>*, int, int, int, bool) :143 6x 75.0% 76.0% std::error_code boost::corosio::detail::do_open_acceptor<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::select_traits, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint> >(boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::select_traits, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>*, int, int, int, bool) :143 63x 66.7% 76.0% boost::corosio::detail::reactor_tcp_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint> >::reactor_tcp_service_final(boost::capy::execution_context&) :186 357x 100.0% 100.0% boost::corosio::detail::reactor_tcp_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint> >::reactor_tcp_service_final(boost::capy::execution_context&) :186 230x 100.0% 100.0% boost::corosio::detail::reactor_tcp_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint> >::open_socket(boost::corosio::tcp_socket::implementation&, int, int, int) :189 2988x 100.0% 100.0% boost::corosio::detail::reactor_tcp_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint> >::open_socket(boost::corosio::tcp_socket::implementation&, int, int, int) :189 2094x 100.0% 100.0% boost::corosio::detail::reactor_tcp_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint> >::bind_socket(boost::corosio::tcp_socket::implementation&, boost::corosio::endpoint) :198 6x 100.0% 100.0% boost::corosio::detail::reactor_tcp_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint> >::bind_socket(boost::corosio::tcp_socket::implementation&, boost::corosio::endpoint) :198 6x 100.0% 100.0% boost::corosio::detail::reactor_tcp_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint> >::pre_shutdown(boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>*) :204 0 0.0% 0.0% boost::corosio::detail::reactor_tcp_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint> >::pre_shutdown(boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>*) :204 0 0.0% 0.0% boost::corosio::detail::reactor_tcp_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint> >::pre_destroy(boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>*) :209 8967x 100.0% 100.0% boost::corosio::detail::reactor_tcp_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint> >::pre_destroy(boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>*) :209 6246x 100.0% 100.0% boost::corosio::detail::reactor_local_stream_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint> >::reactor_local_stream_service_final(boost::capy::execution_context&) :233 357x 100.0% 100.0% boost::corosio::detail::reactor_local_stream_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint> >::reactor_local_stream_service_final(boost::capy::execution_context&) :233 230x 100.0% 100.0% boost::corosio::detail::reactor_local_stream_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint> >::open_socket(boost::corosio::local_stream_socket::implementation&, int, int, int) :236 4x 100.0% 100.0% boost::corosio::detail::reactor_local_stream_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint> >::open_socket(boost::corosio::local_stream_socket::implementation&, int, int, int) :236 4x 100.0% 100.0% boost::corosio::detail::reactor_local_stream_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint> >::assign_socket(boost::corosio::local_stream_socket::implementation&, int) :245 8x 100.0% 100.0% boost::corosio::detail::reactor_local_stream_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint> >::assign_socket(boost::corosio::local_stream_socket::implementation&, int) :245 8x 100.0% 100.0% boost::corosio::detail::reactor_udp_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::udp_socket::implementation, boost::corosio::endpoint> >::reactor_udp_service_final(boost::capy::execution_context&) :271 357x 100.0% 100.0% boost::corosio::detail::reactor_udp_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::select_traits, boost::corosio::udp_socket::implementation, boost::corosio::endpoint> >::reactor_udp_service_final(boost::capy::execution_context&) :271 230x 100.0% 100.0% boost::corosio::detail::reactor_udp_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::udp_socket::implementation, boost::corosio::endpoint> >::open_datagram_socket(boost::corosio::udp_socket::implementation&, int, int, int) :274 40x 100.0% 100.0% boost::corosio::detail::reactor_udp_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::select_traits, boost::corosio::udp_socket::implementation, boost::corosio::endpoint> >::open_datagram_socket(boost::corosio::udp_socket::implementation&, int, int, int) :274 40x 100.0% 100.0% boost::corosio::detail::reactor_udp_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::udp_socket::implementation, boost::corosio::endpoint> >::bind_datagram(boost::corosio::udp_socket::implementation&, boost::corosio::endpoint) :283 24x 100.0% 100.0% boost::corosio::detail::reactor_udp_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::select_traits, boost::corosio::udp_socket::implementation, boost::corosio::endpoint> >::bind_datagram(boost::corosio::udp_socket::implementation&, boost::corosio::endpoint) :283 24x 100.0% 100.0% boost::corosio::detail::reactor_local_dgram_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint> >::reactor_local_dgram_service_final(boost::capy::execution_context&) :308 357x 100.0% 100.0% boost::corosio::detail::reactor_local_dgram_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint> >::reactor_local_dgram_service_final(boost::capy::execution_context&) :308 230x 100.0% 100.0% boost::corosio::detail::reactor_local_dgram_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint> >::open_socket(boost::corosio::local_datagram_socket::implementation&, int, int, int) :311 10x 100.0% 100.0% boost::corosio::detail::reactor_local_dgram_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint> >::open_socket(boost::corosio::local_datagram_socket::implementation&, int, int, int) :311 10x 100.0% 100.0% boost::corosio::detail::reactor_local_dgram_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint> >::assign_socket(boost::corosio::local_datagram_socket::implementation&, int) :320 6x 100.0% 100.0% boost::corosio::detail::reactor_local_dgram_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint> >::assign_socket(boost::corosio::local_datagram_socket::implementation&, int) :320 6x 100.0% 100.0% boost::corosio::detail::reactor_local_dgram_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint> >::bind_socket(boost::corosio::local_datagram_socket::implementation&, boost::corosio::local_endpoint) :327 8x 100.0% 100.0% boost::corosio::detail::reactor_local_dgram_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_dgram_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_datagram_socket::implementation, boost::corosio::local_endpoint> >::bind_socket(boost::corosio::local_datagram_socket::implementation&, boost::corosio::local_endpoint) :327 8x 100.0% 100.0% boost::corosio::detail::reactor_acceptor_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>, boost::corosio::detail::reactor_local_stream_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint> >, boost::corosio::local_endpoint>::reactor_acceptor_service_final(boost::capy::execution_context&) :359 357x 100.0% 100.0% boost::corosio::detail::reactor_acceptor_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>, boost::corosio::detail::reactor_tcp_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint> >, boost::corosio::endpoint>::reactor_acceptor_service_final(boost::capy::execution_context&) :359 357x 100.0% 100.0% boost::corosio::detail::reactor_acceptor_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>, boost::corosio::detail::reactor_local_stream_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint> >, boost::corosio::local_endpoint>::reactor_acceptor_service_final(boost::capy::execution_context&) :359 230x 100.0% 100.0% boost::corosio::detail::reactor_acceptor_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::select_traits, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>, boost::corosio::detail::reactor_tcp_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint> >, boost::corosio::endpoint>::reactor_acceptor_service_final(boost::capy::execution_context&) :359 230x 100.0% 100.0% boost::corosio::detail::reactor_acceptor_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>, boost::corosio::detail::reactor_local_stream_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint> >, boost::corosio::local_endpoint>::open_acceptor_socket(boost::corosio::local_stream_acceptor::implementation&, int, int, int) :369 6x 100.0% 100.0% boost::corosio::detail::reactor_acceptor_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>, boost::corosio::detail::reactor_tcp_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint> >, boost::corosio::endpoint>::open_acceptor_socket(boost::corosio::tcp_acceptor::implementation&, int, int, int) :369 83x 100.0% 100.0% boost::corosio::detail::reactor_acceptor_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>, boost::corosio::detail::reactor_local_stream_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint> >, boost::corosio::local_endpoint>::open_acceptor_socket(boost::corosio::local_stream_acceptor::implementation&, int, int, int) :369 6x 100.0% 100.0% boost::corosio::detail::reactor_acceptor_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::select_traits, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>, boost::corosio::detail::reactor_tcp_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint> >, boost::corosio::endpoint>::open_acceptor_socket(boost::corosio::tcp_acceptor::implementation&, int, int, int) :369 63x 100.0% 100.0% boost::corosio::detail::reactor_acceptor_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>, boost::corosio::detail::reactor_local_stream_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint> >, boost::corosio::local_endpoint>::bind_acceptor(boost::corosio::local_stream_acceptor::implementation&, boost::corosio::local_endpoint) :379 6x 100.0% 100.0% boost::corosio::detail::reactor_acceptor_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>, boost::corosio::detail::reactor_tcp_service_final<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint> >, boost::corosio::endpoint>::bind_acceptor(boost::corosio::tcp_acceptor::implementation&, boost::corosio::endpoint) :379 82x 100.0% 100.0% boost::corosio::detail::reactor_acceptor_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>, boost::corosio::detail::reactor_local_stream_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint> >, boost::corosio::local_endpoint>::bind_acceptor(boost::corosio::local_stream_acceptor::implementation&, boost::corosio::local_endpoint) :379 6x 100.0% 100.0% boost::corosio::detail::reactor_acceptor_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::select_traits, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>, boost::corosio::detail::reactor_tcp_service_final<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint> >, boost::corosio::endpoint>::bind_acceptor(boost::corosio::tcp_acceptor::implementation&, boost::corosio::endpoint) :379 62x 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_SERVICE_FINALS_HPP
11 #define BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_SERVICE_FINALS_HPP
12
13 /* Parameterized final service types for reactor backends.
14
15 One service template per protocol (TCP, local stream, UDP, local
16 datagram, TCP acceptor, local stream acceptor) because each abstract
17 service base declares different virtual methods.
18 */
19
20 #include <boost/corosio/native/detail/reactor/reactor_socket_finals.hpp>
21 #include <boost/corosio/native/detail/reactor/reactor_socket_service.hpp>
22 #include <boost/corosio/native/detail/reactor/reactor_acceptor_service.hpp>
23 #include <boost/corosio/detail/tcp_service.hpp>
24 #include <boost/corosio/detail/udp_service.hpp>
25 #include <boost/corosio/detail/local_stream_service.hpp>
26 #include <boost/corosio/detail/local_datagram_service.hpp>
27
28 #include <boost/corosio/native/detail/endpoint_convert.hpp>
29 #include <boost/corosio/native/detail/make_err.hpp>
30
31 #include <system_error>
32 #include <type_traits>
33
34 #include <sys/socket.h>
35 #include <unistd.h>
36
37 namespace boost::corosio::detail {
38
39 // ============================================================
40 // Shared socket creation helpers
41 // ============================================================
42
43 template<class Traits, class SocketFinal>
44 std::error_code
45 5190x do_open_socket(
46 SocketFinal* socket_impl,
47 int family, int type, int protocol,
48 bool is_ip) noexcept
49 {
50 5190x socket_impl->close_socket();
51
52 5190x int fd = Traits::create_socket(family, type, protocol);
53 5190x if (fd < 0)
54 return make_err(errno);
55
56 std::error_code ec = is_ip
57 5190x ? Traits::configure_ip_socket(fd, family)
58 28x : Traits::configure_local_socket(fd);
59
60 5190x if (ec)
61 {
62 ::close(fd);
63 return ec;
64 }
65
66 5190x socket_impl->init_and_register(fd);
67 5190x return {};
68 }
69
70 template<class Traits, class SocketFinal>
71 std::error_code
72 28x do_assign_fd(
73 SocketFinal* socket_impl,
74 int fd,
75 int expected_type) noexcept
76 {
77 28x socket_impl->close_socket();
78
79 // Validate that fd is actually an AF_UNIX socket of the expected
80 // type BEFORE applying any backend setup. Otherwise we could
81 // adopt (or worse, mutate flags on) a foreign fd — e.g., an
82 // AF_INET SOCK_STREAM fd passed into local_stream_socket::assign,
83 // or a SOCK_DGRAM fd passed into a stream socket. The caller
84 // retains ownership of fd on any error from this function, so
85 // doing the checks first leaves a rejected fd unmodified.
86 {
87 28x sockaddr_storage st{};
88 28x socklen_t st_len = sizeof(st);
89 28x if (::getsockname(
90 28x fd, reinterpret_cast<sockaddr*>(&st), &st_len) != 0)
91 return make_err(errno);
92 28x if (st.ss_family != AF_UNIX)
93 return make_err(EAFNOSUPPORT);
94
95 28x int sock_type = 0;
96 28x socklen_t opt_len = sizeof(sock_type);
97 28x if (::getsockopt(
98 28x fd, SOL_SOCKET, SO_TYPE, &sock_type, &opt_len) != 0)
99 return make_err(errno);
100 28x if (sock_type != expected_type)
101 return make_err(EPROTOTYPE);
102 }
103
104 // Apply backend fd setup (O_NONBLOCK, FD_CLOEXEC, SO_NOSIGPIPE on kqueue,
105 // FD_SETSIZE validation on select). On failure, the caller retains
106 // ownership of fd — assign_socket reports the error and assign() throws
107 // without closing.
108 28x std::error_code ec = Traits::configure_local_socket(fd);
109 28x if (ec)
110 return ec;
111
112 28x socket_impl->init_and_register(fd);
113
114 // Best-effort: refresh endpoint caches so local_endpoint() and
115 // remote_endpoint() reflect the actual fd state. Failures (e.g.
116 // ENOTCONN from getpeername on an unconnected socket) are ignored;
117 // for unnamed socketpair() fds the queries succeed but yield empty
118 // endpoints, which is the correct cached state.
119 using endpoint_type = std::remove_cvref_t<
120 decltype(socket_impl->local_endpoint())>;
121
122 28x endpoint_type local_ep{};
123 28x sockaddr_storage local_storage{};
124 28x socklen_t local_len = sizeof(local_storage);
125 28x if (::getsockname(
126 28x fd, reinterpret_cast<sockaddr*>(&local_storage), &local_len) == 0)
127 28x local_ep = from_sockaddr_as(local_storage, local_len, endpoint_type{});
128
129 28x endpoint_type remote_ep{};
130 28x sockaddr_storage peer_storage{};
131 28x socklen_t peer_len = sizeof(peer_storage);
132 28x if (::getpeername(
133 28x fd, reinterpret_cast<sockaddr*>(&peer_storage), &peer_len) == 0)
134 28x remote_ep = from_sockaddr_as(peer_storage, peer_len, endpoint_type{});
135
136 28x socket_impl->set_endpoints(local_ep, remote_ep);
137
138 28x return {};
139 }
140
141 template<class Traits, class AccFinal>
142 std::error_code
143 158x do_open_acceptor(
144 AccFinal* acc_impl,
145 int family, int type, int protocol,
146 bool is_ip) noexcept
147 {
148 158x acc_impl->close_socket();
149
150 158x int fd = Traits::create_socket(family, type, protocol);
151 158x if (fd < 0)
152 return make_err(errno);
153
154 std::error_code ec = is_ip
155 158x ? Traits::configure_ip_acceptor(fd, family)
156 12x : Traits::configure_local_socket(fd);
157
158 158x if (ec)
159 {
160 ::close(fd);
161 return ec;
162 }
163
164 158x acc_impl->init_acceptor_fd(fd);
165 158x return {};
166 }
167
168 // ============================================================
169 // TCP service
170 // ============================================================
171
172 template<class Traits, class SocketFinal>
173 class reactor_tcp_service_final final
174 : public reactor_socket_service<
175 reactor_tcp_service_final<Traits, SocketFinal>,
176 tcp_service,
177 typename Traits::scheduler_type,
178 SocketFinal>
179 {
180 using base_service = reactor_socket_service<
181 reactor_tcp_service_final, tcp_service,
182 typename Traits::scheduler_type, SocketFinal>;
183 friend base_service;
184
185 public:
186 587x explicit reactor_tcp_service_final(capy::execution_context& ctx)
187 587x : base_service(ctx) {}
188
189 5082x std::error_code open_socket(
190 tcp_socket::implementation& impl,
191 int family, int type, int protocol) override
192 {
193 5082x return do_open_socket<Traits>(
194 static_cast<SocketFinal*>(&impl),
195 5082x family, type, protocol, true);
196 }
197
198 12x std::error_code bind_socket(
199 tcp_socket::implementation& impl, endpoint ep) override
200 {
201 12x return static_cast<SocketFinal*>(&impl)->do_bind(ep);
202 }
203
204 void pre_shutdown(SocketFinal* impl) noexcept
205 {
206 impl->hook_.pre_shutdown(impl->native_handle());
207 }
208
209 15213x void pre_destroy(SocketFinal* impl) noexcept
210 {
211 15213x impl->hook_.pre_destroy(impl->native_handle());
212 15213x }
213 };
214
215 // ============================================================
216 // Local stream service
217 // ============================================================
218
219 template<class Traits, class SocketFinal>
220 class reactor_local_stream_service_final final
221 : public reactor_socket_service<
222 reactor_local_stream_service_final<Traits, SocketFinal>,
223 local_stream_service,
224 typename Traits::scheduler_type,
225 SocketFinal>
226 {
227 using base_service = reactor_socket_service<
228 reactor_local_stream_service_final, local_stream_service,
229 typename Traits::scheduler_type, SocketFinal>;
230 friend base_service;
231
232 public:
233 587x explicit reactor_local_stream_service_final(capy::execution_context& ctx)
234 587x : base_service(ctx) {}
235
236 8x std::error_code open_socket(
237 local_stream_socket::implementation& impl,
238 int family, int type, int protocol) override
239 {
240 8x return do_open_socket<Traits>(
241 static_cast<SocketFinal*>(&impl),
242 8x family, type, protocol, false);
243 }
244
245 16x std::error_code assign_socket(
246 local_stream_socket::implementation& impl, int fd) override
247 {
248 16x return do_assign_fd<Traits>(
249 16x static_cast<SocketFinal*>(&impl), fd, SOCK_STREAM);
250 }
251 };
252
253 // ============================================================
254 // UDP service
255 // ============================================================
256
257 template<class Traits, class SocketFinal>
258 class reactor_udp_service_final final
259 : public reactor_socket_service<
260 reactor_udp_service_final<Traits, SocketFinal>,
261 udp_service,
262 typename Traits::scheduler_type,
263 SocketFinal>
264 {
265 using base_service = reactor_socket_service<
266 reactor_udp_service_final, udp_service,
267 typename Traits::scheduler_type, SocketFinal>;
268 friend base_service;
269
270 public:
271 587x explicit reactor_udp_service_final(capy::execution_context& ctx)
272 587x : base_service(ctx) {}
273
274 80x std::error_code open_datagram_socket(
275 udp_socket::implementation& impl,
276 int family, int type, int protocol) override
277 {
278 80x return do_open_socket<Traits>(
279 static_cast<SocketFinal*>(&impl),
280 80x family, type, protocol, true);
281 }
282
283 48x std::error_code bind_datagram(
284 udp_socket::implementation& impl, endpoint ep) override
285 {
286 48x return static_cast<SocketFinal*>(&impl)->do_bind(ep);
287 }
288 };
289
290 // ============================================================
291 // Local datagram service
292 // ============================================================
293
294 template<class Traits, class SocketFinal>
295 class reactor_local_dgram_service_final final
296 : public reactor_socket_service<
297 reactor_local_dgram_service_final<Traits, SocketFinal>,
298 local_datagram_service,
299 typename Traits::scheduler_type,
300 SocketFinal>
301 {
302 using base_service = reactor_socket_service<
303 reactor_local_dgram_service_final, local_datagram_service,
304 typename Traits::scheduler_type, SocketFinal>;
305 friend base_service;
306
307 public:
308 587x explicit reactor_local_dgram_service_final(capy::execution_context& ctx)
309 587x : base_service(ctx) {}
310
311 20x std::error_code open_socket(
312 local_datagram_socket::implementation& impl,
313 int family, int type, int protocol) override
314 {
315 20x return do_open_socket<Traits>(
316 static_cast<SocketFinal*>(&impl),
317 20x family, type, protocol, false);
318 }
319
320 12x std::error_code assign_socket(
321 local_datagram_socket::implementation& impl, int fd) override
322 {
323 12x return do_assign_fd<Traits>(
324 12x static_cast<SocketFinal*>(&impl), fd, SOCK_DGRAM);
325 }
326
327 16x std::error_code bind_socket(
328 local_datagram_socket::implementation& impl,
329 corosio::local_endpoint ep) override
330 {
331 16x return static_cast<SocketFinal*>(&impl)->do_bind(ep);
332 }
333 };
334
335 // ============================================================
336 // Acceptor service
337 // ============================================================
338
339 template<class Traits, class ServiceBase, class AccFinal,
340 class StreamServiceFinal, class Endpoint>
341 class reactor_acceptor_service_final final
342 : public reactor_acceptor_service<
343 reactor_acceptor_service_final<Traits, ServiceBase, AccFinal,
344 StreamServiceFinal, Endpoint>,
345 ServiceBase,
346 typename Traits::scheduler_type,
347 AccFinal,
348 StreamServiceFinal>
349 {
350 using base_service = reactor_acceptor_service<
351 reactor_acceptor_service_final,
352 ServiceBase,
353 typename Traits::scheduler_type,
354 AccFinal,
355 StreamServiceFinal>;
356 friend base_service;
357
358 public:
359 1174x explicit reactor_acceptor_service_final(capy::execution_context& ctx)
360 1174x : base_service(ctx)
361 {
362 // Look up the concrete stream service directly by its type.
363 // Avoids dynamic_cast which can fail across template boundaries
364 // on some platforms (FreeBSD clang RTTI/visibility).
365 1174x this->stream_svc_ =
366 1174x this->ctx_.template find_service<StreamServiceFinal>();
367 1174x }
368
369 158x std::error_code open_acceptor_socket(
370 typename AccFinal::impl_base_type& impl,
371 int family, int type, int protocol) override
372 {
373 158x return do_open_acceptor<Traits>(
374 static_cast<AccFinal*>(&impl),
375 family, type, protocol,
376 158x std::is_same_v<Endpoint, endpoint>);
377 }
378
379 156x std::error_code bind_acceptor(
380 typename AccFinal::impl_base_type& impl,
381 Endpoint ep) override
382 {
383 156x return static_cast<AccFinal*>(&impl)->do_bind(ep);
384 }
385
386 140x std::error_code listen_acceptor(
387 typename AccFinal::impl_base_type& impl,
388 int backlog) override
389 {
390 140x return static_cast<AccFinal*>(&impl)->do_listen(backlog);
391 }
392 };
393
394 } // namespace boost::corosio::detail
395
396 #endif // BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_SERVICE_FINALS_HPP
397