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

94.6% Lines (139/147) 85.7% List of functions (120/140) 27.4% Branches (196/716)
f(x) Functions (140)
Function Calls Lines Branches Blocks
boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::reactor_basic_socket(boost::corosio::detail::kqueue_tcp_service&) :60 16956x 100.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::reactor_basic_socket(boost::corosio::detail::kqueue_udp_service&) :60 48x 100.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::reactor_basic_socket(boost::corosio::detail::select_tcp_service&) :60 5389x 0.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::reactor_basic_socket(boost::corosio::detail::select_udp_service&) :60 48x 100.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::~reactor_basic_socket() :71 16956x 100.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::~reactor_basic_socket() :71 48x 100.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::~reactor_basic_socket() :71 5389x 0.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::~reactor_basic_socket() :71 48x 100.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::native_handle() const :74 37662x 100.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::native_handle() const :74 237x 100.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::native_handle() const :74 10970x 0.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::native_handle() const :74 237x 100.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::local_endpoint() const :80 19x 100.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::local_endpoint() const :80 17x 100.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::local_endpoint() const :80 19x 0.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::local_endpoint() const :80 17x 100.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::set_option(int, int, void const*, unsigned long) :92 0 83.3% 16.7% 0.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::set_option(int, int, void const*, unsigned long) :92 10x 83.3% 16.7% 57.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::set_option(int, int, void const*, unsigned long) :92 30x 0.0% 0.0% 57.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::set_option(int, int, void const*, unsigned long) :92 10x 100.0% 57.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::get_option(int, int, void*, unsigned long*) const :106 31x 85.7% 33.3% 57.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::get_option(int, int, void*, unsigned long*) const :106 8x 85.7% 16.7% 57.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::get_option(int, int, void*, unsigned long*) const :106 31x 0.0% 0.0% 57.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::get_option(int, int, void*, unsigned long*) const :106 8x 100.0% 57.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::set_socket(int) :117 5616x 100.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::set_socket(int) :117 1786x 0.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_bind(boost::corosio::endpoint) :136 25x 91.7% 40.0% 70.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_bind(boost::corosio::endpoint) :136 25x 100.0% 70.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::register_op<boost::corosio::detail::kqueue_connect_op>(boost::corosio::detail::kqueue_connect_op&, boost::corosio::detail::reactor_op_base*&, bool&, bool&) :201 5618x 85.7% 35.4% 43.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::register_op<boost::corosio::detail::kqueue_read_op>(boost::corosio::detail::kqueue_read_op&, boost::corosio::detail::reactor_op_base*&, bool&, bool&) :201 65743x 100.0% 87.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::register_op<boost::corosio::detail::kqueue_write_op>(boost::corosio::detail::kqueue_write_op&, boost::corosio::detail::reactor_op_base*&, bool&, bool&) :201 0 100.0% 0.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::register_op<boost::corosio::detail::kqueue_recv_from_op>(boost::corosio::detail::kqueue_recv_from_op&, boost::corosio::detail::reactor_op_base*&, bool&, bool&) :201 10x 42.9% 15.6% 43.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::register_op<boost::corosio::detail::kqueue_recv_op>(boost::corosio::detail::kqueue_recv_op&, boost::corosio::detail::reactor_op_base*&, bool&, bool&) :201 2x 42.9% 3.9% 43.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::register_op<boost::corosio::detail::kqueue_send_op>(boost::corosio::detail::kqueue_send_op&, boost::corosio::detail::reactor_op_base*&, bool&, bool&) :201 0 100.0% 0.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::register_op<boost::corosio::detail::kqueue_send_to_op>(boost::corosio::detail::kqueue_send_to_op&, boost::corosio::detail::reactor_op_base*&, bool&, bool&) :201 0 100.0% 0.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::register_op<boost::corosio::detail::kqueue_udp_connect_op>(boost::corosio::detail::kqueue_udp_connect_op&, boost::corosio::detail::reactor_op_base*&, bool&, bool&) :201 0 100.0% 0.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::register_op<boost::corosio::detail::select_connect_op>(boost::corosio::detail::select_connect_op&, boost::corosio::detail::reactor_op_base*&, bool&, bool&) :201 1789x 0.0% 0.0% 43.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::register_op<boost::corosio::detail::select_read_op>(boost::corosio::detail::select_read_op&, boost::corosio::detail::reactor_op_base*&, bool&, bool&) :201 48149x 100.0% 87.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::register_op<boost::corosio::detail::select_write_op>(boost::corosio::detail::select_write_op&, boost::corosio::detail::reactor_op_base*&, bool&, bool&) :201 0 100.0% 0.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::register_op<boost::corosio::detail::select_recv_from_op>(boost::corosio::detail::select_recv_from_op&, boost::corosio::detail::reactor_op_base*&, bool&, bool&) :201 14x 100.0% 43.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::register_op<boost::corosio::detail::select_recv_op>(boost::corosio::detail::select_recv_op&, boost::corosio::detail::reactor_op_base*&, bool&, bool&) :201 2x 100.0% 43.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::register_op<boost::corosio::detail::select_send_op>(boost::corosio::detail::select_send_op&, boost::corosio::detail::reactor_op_base*&, bool&, bool&) :201 0 100.0% 0.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::register_op<boost::corosio::detail::select_send_to_op>(boost::corosio::detail::select_send_to_op&, boost::corosio::detail::reactor_op_base*&, bool&, bool&) :201 0 100.0% 0.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::register_op<boost::corosio::detail::select_udp_connect_op>(boost::corosio::detail::select_udp_connect_op&, boost::corosio::detail::reactor_op_base*&, bool&, bool&) :201 0 100.0% 0.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::cancel_single_op<boost::corosio::detail::kqueue_connect_op>(boost::corosio::detail::kqueue_connect_op&) :240 0 100.0% 0.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::cancel_single_op<boost::corosio::detail::kqueue_read_op>(boost::corosio::detail::kqueue_read_op&) :240 757x 100.0% 63.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::cancel_single_op<boost::corosio::detail::kqueue_write_op>(boost::corosio::detail::kqueue_write_op&) :240 1x 95.7% 21.4% 63.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::cancel_single_op<boost::corosio::detail::kqueue_recv_from_op>(boost::corosio::detail::kqueue_recv_from_op&) :240 1x 100.0% 63.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::cancel_single_op<boost::corosio::detail::kqueue_recv_op>(boost::corosio::detail::kqueue_recv_op&) :240 0 82.6% 5.4% 0.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::cancel_single_op<boost::corosio::detail::kqueue_send_op>(boost::corosio::detail::kqueue_send_op&) :240 0 100.0% 0.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::cancel_single_op<boost::corosio::detail::kqueue_send_to_op>(boost::corosio::detail::kqueue_send_to_op&) :240 0 100.0% 0.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::cancel_single_op<boost::corosio::detail::kqueue_udp_connect_op>(boost::corosio::detail::kqueue_udp_connect_op&) :240 0 100.0% 0.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::cancel_single_op<boost::corosio::detail::select_connect_op>(boost::corosio::detail::select_connect_op&) :240 0 100.0% 0.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::cancel_single_op<boost::corosio::detail::select_read_op>(boost::corosio::detail::select_read_op&) :240 38x 100.0% 63.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::cancel_single_op<boost::corosio::detail::select_write_op>(boost::corosio::detail::select_write_op&) :240 0 0.0% 0.0% 0.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::cancel_single_op<boost::corosio::detail::select_recv_from_op>(boost::corosio::detail::select_recv_from_op&) :240 1x 100.0% 63.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::cancel_single_op<boost::corosio::detail::select_recv_op>(boost::corosio::detail::select_recv_op&) :240 0 100.0% 0.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::cancel_single_op<boost::corosio::detail::select_send_op>(boost::corosio::detail::select_send_op&) :240 0 100.0% 0.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::cancel_single_op<boost::corosio::detail::select_send_to_op>(boost::corosio::detail::select_send_to_op&) :240 0 100.0% 0.0% void boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::cancel_single_op<boost::corosio::detail::select_udp_connect_op>(boost::corosio::detail::select_udp_connect_op&) :240 0 100.0% 0.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::do_cancel() :278 118x 80.0% 50.0% 70.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_cancel() :278 3x 80.0% 25.0% 70.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::do_cancel() :278 44x 0.0% 0.0% 70.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_cancel() :278 3x 100.0% 70.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::do_cancel()::'lambda'(auto&)::operator()<boost::corosio::detail::kqueue_connect_op>(auto&) const :286 118x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::do_cancel()::'lambda'(auto&)::operator()<boost::corosio::detail::kqueue_read_op>(auto&) const :286 118x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::do_cancel()::'lambda'(auto&)::operator()<boost::corosio::detail::kqueue_write_op>(auto&) const :286 118x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_cancel()::'lambda'(auto&)::operator()<boost::corosio::detail::kqueue_recv_from_op>(auto&) const :286 3x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_cancel()::'lambda'(auto&)::operator()<boost::corosio::detail::kqueue_recv_op>(auto&) const :286 3x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_cancel()::'lambda'(auto&)::operator()<boost::corosio::detail::kqueue_send_op>(auto&) const :286 3x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_cancel()::'lambda'(auto&)::operator()<boost::corosio::detail::kqueue_send_to_op>(auto&) const :286 3x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_cancel()::'lambda'(auto&)::operator()<boost::corosio::detail::kqueue_udp_connect_op>(auto&) const :286 3x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::do_cancel()::'lambda'(auto&)::operator()<boost::corosio::detail::select_connect_op>(auto&) const :286 44x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::do_cancel()::'lambda'(auto&)::operator()<boost::corosio::detail::select_read_op>(auto&) const :286 44x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::do_cancel()::'lambda'(auto&)::operator()<boost::corosio::detail::select_write_op>(auto&) const :286 44x 0.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_cancel()::'lambda'(auto&)::operator()<boost::corosio::detail::select_recv_from_op>(auto&) const :286 3x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_cancel()::'lambda'(auto&)::operator()<boost::corosio::detail::select_recv_op>(auto&) const :286 3x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_cancel()::'lambda'(auto&)::operator()<boost::corosio::detail::select_send_op>(auto&) const :286 3x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_cancel()::'lambda'(auto&)::operator()<boost::corosio::detail::select_send_to_op>(auto&) const :286 3x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_cancel()::'lambda'(auto&)::operator()<boost::corosio::detail::select_udp_connect_op>(auto&) const :286 3x 100.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::do_cancel()::claimed_entry::claimed_entry() :289 708x 100.0% 50.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_cancel()::claimed_entry::claimed_entry() :289 18x 100.0% 25.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::do_cancel()::claimed_entry::claimed_entry() :289 264x 0.0% 0.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_cancel()::claimed_entry::claimed_entry() :289 18x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::do_cancel()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::kqueue_connect_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :300 118x 100.0% 66.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::do_cancel()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::kqueue_read_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :300 118x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::do_cancel()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::kqueue_write_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :300 118x 100.0% 70.0% 66.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_cancel()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::kqueue_recv_from_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :300 3x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_cancel()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::kqueue_recv_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :300 3x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_cancel()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::kqueue_send_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :300 3x 100.0% 41.7% 66.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_cancel()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::kqueue_send_to_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :300 3x 100.0% 66.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_cancel()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::kqueue_udp_connect_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :300 3x 100.0% 66.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::do_cancel()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::select_connect_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :300 44x 100.0% 66.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::do_cancel()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::select_read_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :300 44x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::do_cancel()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::select_write_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :300 44x 0.0% 0.0% 66.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_cancel()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::select_recv_from_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :300 3x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_cancel()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::select_recv_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :300 3x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_cancel()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::select_send_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :300 3x 100.0% 66.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_cancel()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::select_send_to_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :300 3x 100.0% 66.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_cancel()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::select_udp_connect_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :300 3x 100.0% 66.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::do_close_socket() :321 50798x 100.0% 90.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_close_socket() :321 186x 100.0% 50.0% 90.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::do_close_socket() :321 16176x 100.0% 90.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_close_socket() :321 186x 100.0% 85.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::do_close_socket()::'lambda'(auto&)::operator()<boost::corosio::detail::kqueue_connect_op>(auto&) const :328 50798x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::do_close_socket()::'lambda'(auto&)::operator()<boost::corosio::detail::kqueue_read_op>(auto&) const :328 50798x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::do_close_socket()::'lambda'(auto&)::operator()<boost::corosio::detail::kqueue_write_op>(auto&) const :328 50798x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_close_socket()::'lambda'(auto&)::operator()<boost::corosio::detail::kqueue_recv_from_op>(auto&) const :328 186x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_close_socket()::'lambda'(auto&)::operator()<boost::corosio::detail::kqueue_recv_op>(auto&) const :328 186x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_close_socket()::'lambda'(auto&)::operator()<boost::corosio::detail::kqueue_send_op>(auto&) const :328 186x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_close_socket()::'lambda'(auto&)::operator()<boost::corosio::detail::kqueue_send_to_op>(auto&) const :328 186x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_close_socket()::'lambda'(auto&)::operator()<boost::corosio::detail::kqueue_udp_connect_op>(auto&) const :328 186x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::do_close_socket()::'lambda'(auto&)::operator()<boost::corosio::detail::select_connect_op>(auto&) const :328 16176x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::do_close_socket()::'lambda'(auto&)::operator()<boost::corosio::detail::select_read_op>(auto&) const :328 16176x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::do_close_socket()::'lambda'(auto&)::operator()<boost::corosio::detail::select_write_op>(auto&) const :328 16176x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_close_socket()::'lambda'(auto&)::operator()<boost::corosio::detail::select_recv_from_op>(auto&) const :328 186x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_close_socket()::'lambda'(auto&)::operator()<boost::corosio::detail::select_recv_op>(auto&) const :328 186x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_close_socket()::'lambda'(auto&)::operator()<boost::corosio::detail::select_send_op>(auto&) const :328 186x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_close_socket()::'lambda'(auto&)::operator()<boost::corosio::detail::select_send_to_op>(auto&) const :328 186x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_close_socket()::'lambda'(auto&)::operator()<boost::corosio::detail::select_udp_connect_op>(auto&) const :328 186x 100.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::do_close_socket()::claimed_entry::claimed_entry() :330 304788x 100.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_close_socket()::claimed_entry::claimed_entry() :330 1116x 100.0% 50.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::do_close_socket()::claimed_entry::claimed_entry() :330 97056x 100.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_close_socket()::claimed_entry::claimed_entry() :330 1116x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::do_close_socket()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::kqueue_connect_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :340 50798x 100.0% 66.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::do_close_socket()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::kqueue_read_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :340 50798x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::descriptor_state>::do_close_socket()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::kqueue_write_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :340 50798x 100.0% 66.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_close_socket()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::kqueue_recv_from_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :340 186x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_close_socket()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::kqueue_recv_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :340 186x 100.0% 66.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_close_socket()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::kqueue_send_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :340 186x 100.0% 67.0% 66.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_close_socket()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::kqueue_send_to_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :340 186x 100.0% 66.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::descriptor_state>::do_close_socket()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::kqueue_udp_connect_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :340 186x 100.0% 66.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::do_close_socket()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::select_connect_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :340 16176x 100.0% 66.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::do_close_socket()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::select_read_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :340 16176x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::select_descriptor_state>::do_close_socket()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::select_write_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :340 16176x 100.0% 66.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_close_socket()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::select_recv_from_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :340 186x 100.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_close_socket()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::select_recv_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :340 186x 100.0% 66.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_close_socket()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::select_send_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :340 186x 100.0% 66.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_close_socket()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::select_send_to_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :340 186x 100.0% 66.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::select_descriptor_state>::do_close_socket()::'lambda'(auto&, boost::corosio::detail::reactor_op_base*&)::operator()<boost::corosio::detail::select_udp_connect_op>(auto&, boost::corosio::detail::reactor_op_base*&) const :340 186x 100.0% 66.0%
Line Branch TLA Hits Source Code
1 //
2 // Copyright (c) 2026 Steve Gerbino
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_BASIC_SOCKET_HPP
11 #define BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_BASIC_SOCKET_HPP
12
13 #include <boost/corosio/detail/intrusive.hpp>
14 #include <boost/corosio/detail/native_handle.hpp>
15 #include <boost/corosio/endpoint.hpp>
16 #include <boost/corosio/native/detail/reactor/reactor_op_base.hpp>
17 #include <boost/corosio/native/detail/make_err.hpp>
18 #include <boost/corosio/native/detail/endpoint_convert.hpp>
19
20 #include <memory>
21 #include <mutex>
22 #include <utility>
23
24 #include <errno.h>
25 #include <netinet/in.h>
26 #include <sys/socket.h>
27 #include <unistd.h>
28
29 namespace boost::corosio::detail {
30
31 /** CRTP base for reactor-backed socket implementations.
32
33 Extracts the shared data members, virtual overrides, and
34 cancel/close/register logic that is identical across TCP
35 (reactor_stream_socket) and UDP (reactor_datagram_socket).
36
37 Derived classes provide CRTP callbacks that enumerate their
38 specific op slots so cancel/close can iterate them generically.
39
40 @tparam Derived The concrete socket type (CRTP).
41 @tparam ImplBase The public vtable base (tcp_socket::implementation
42 or udp_socket::implementation).
43 @tparam Service The backend's service type.
44 @tparam DescState The backend's descriptor_state type.
45 */
46 template<class Derived, class ImplBase, class Service, class DescState>
47 class reactor_basic_socket
48 : public ImplBase
49 , public std::enable_shared_from_this<Derived>
50 , public intrusive_list<Derived>::node
51 {
52 friend Derived;
53
54 template<class, class, class, class, class, class>
55 friend class reactor_stream_socket;
56
57 template<class, class, class, class, class, class, class, class>
58 friend class reactor_datagram_socket;
59
60 44882x explicit reactor_basic_socket(Service& svc) noexcept : svc_(svc) {}
61
62 protected:
63 Service& svc_;
64 22441x int fd_ = -1;
65 endpoint local_endpoint_;
66
67 public:
68 /// Per-descriptor state for persistent reactor registration.
69 DescState desc_state_;
70
71 22441x ~reactor_basic_socket() override = default;
72
73 /// Return the underlying file descriptor.
74 49106x native_handle_type native_handle() const noexcept override
75 {
76 49106x return fd_;
77 }
78
79 /// Return the cached local endpoint.
80 72x endpoint local_endpoint() const noexcept override
81 {
82 72x return local_endpoint_;
83 }
84
85 /// Return true if the socket has an open file descriptor.
86 bool is_open() const noexcept
87 {
88 return fd_ >= 0;
89 }
90
91 /// Set a socket option.
92 50x std::error_code set_option(
93 int level,
94 int optname,
95 void const* data,
96 std::size_t size) noexcept override
97 {
98
6/16
✓ Branch 0 taken 30 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 30 times.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 10 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 10 times.
50x if (::setsockopt(
99 50x fd_, level, optname, data, static_cast<socklen_t>(size)) != 0)
100 return make_err(errno);
101 50x return {};
102 50x }
103
104 /// Get a socket option.
105 std::error_code
106 78x get_option(int level, int optname, void* data, std::size_t* size)
107 const noexcept override
108 {
109 78x socklen_t len = static_cast<socklen_t>(*size);
110
6/16
✓ Branch 0 taken 31 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 31 times.
✓ Branch 4 taken 39 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 39 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 8 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 8 times.
78x if (::getsockopt(fd_, level, optname, data, &len) != 0)
111 return make_err(errno);
112 78x *size = static_cast<std::size_t>(len);
113 78x return {};
114 78x }
115
116 /// Assign the file descriptor.
117 7402x void set_socket(int fd) noexcept
118 {
119 7402x fd_ = fd;
120 7402x }
121
122 /// Cache the local endpoint.
123 void set_local_endpoint(endpoint ep) noexcept
124 {
125 local_endpoint_ = ep;
126 }
127
128 /** Bind the socket to a local endpoint.
129
130 Calls ::bind() and caches the resulting local endpoint
131 via getsockname().
132
133 @param ep The endpoint to bind to.
134 @return Error code on failure, empty on success.
135 */
136 50x std::error_code do_bind(endpoint ep) noexcept
137 {
138 50x sockaddr_storage storage{};
139 50x socklen_t addrlen = to_sockaddr(ep, socket_family(fd_), storage);
140
4/8
✓ Branch 0 taken 25 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 25 times.
✓ Branch 4 taken 25 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 25 times.
50x if (::bind(fd_, reinterpret_cast<sockaddr*>(&storage), addrlen) != 0)
141 return make_err(errno);
142
143 50x sockaddr_storage local_storage{};
144 50x socklen_t local_len = sizeof(local_storage);
145
4/8
✓ Branch 0 taken 25 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 25 times.
✓ Branch 4 taken 25 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 25 times.
50x if (::getsockname(
146 50x fd_, reinterpret_cast<sockaddr*>(&local_storage), &local_len) ==
147 0)
148 50x local_endpoint_ = from_sockaddr(local_storage);
149
150 50x return {};
151 50x }
152
153 /** Register an op with the reactor.
154
155 Handles cached edge events and deferred cancellation.
156 Called on the EAGAIN/EINPROGRESS path when speculative
157 I/O failed.
158 */
159 template<class Op>
160 void register_op(
161 Op& op,
162 reactor_op_base*& desc_slot,
163 bool& ready_flag,
164 bool& cancel_flag) noexcept;
165
166 /** Cancel a single pending operation.
167
168 Claims the operation from its descriptor_state slot under
169 the mutex and posts it to the scheduler as cancelled.
170 Derived must implement:
171 op_to_desc_slot(Op&) -> reactor_op_base**
172 op_to_cancel_flag(Op&) -> bool*
173 */
174 template<class Op>
175 void cancel_single_op(Op& op) noexcept;
176
177 /** Cancel all pending operations.
178
179 Invoked by the derived class's cancel() override.
180 Derived must implement:
181 for_each_op(auto fn)
182 for_each_desc_entry(auto fn)
183 */
184 void do_cancel() noexcept;
185
186 /** Close the socket and cancel pending operations.
187
188 Invoked by the derived class's close_socket(). The
189 derived class may add backend-specific cleanup after
190 calling this method.
191 Derived must implement:
192 for_each_op(auto fn)
193 for_each_desc_entry(auto fn)
194 */
195 void do_close_socket() noexcept;
196 };
197
198 template<class Derived, class ImplBase, class Service, class DescState>
199 template<class Op>
200 void
201 121327x reactor_basic_socket<Derived, ImplBase, Service, DescState>::register_op(
202 Op& op,
203 reactor_op_base*& desc_slot,
204 bool& ready_flag,
205 bool& cancel_flag) noexcept
206 {
207 121327x svc_.work_started();
208
209
7/32
✓ Branch 0 taken 48149 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 14 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1789 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 65753 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 5618 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ 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 taken 2 times.
✗ Branch 31 not taken.
121327x std::lock_guard lock(desc_state_.mutex);
210 121327x bool io_done = false;
211
9/32
✓ Branch 0 taken 47526 times.
✓ Branch 1 taken 623 times.
✓ Branch 2 taken 14 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1789 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 65486 times.
✓ Branch 7 taken 267 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 5618 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ 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 taken 2 times.
✗ Branch 31 not taken.
121327x if (ready_flag)
212 {
213 890x ready_flag = false;
214 890x op.perform_io();
215
4/32
✓ Branch 0 taken 609 times.
✓ Branch 1 taken 14 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 256 times.
✓ Branch 7 taken 11 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 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ 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.
890x io_done = (op.errn != EAGAIN && op.errn != EWOULDBLOCK);
216
4/32
✓ Branch 0 taken 14 times.
✓ Branch 1 taken 609 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 11 times.
✓ Branch 7 taken 256 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 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ 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.
890x if (!io_done)
217 865x op.errn = 0;
218 890x }
219
220
7/32
✓ Branch 0 taken 48149 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 14 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1789 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 65753 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 5618 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ 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 taken 2 times.
✗ Branch 31 not taken.
121327x if (cancel_flag)
221 {
222 cancel_flag = false;
223 op.cancelled.store(true, std::memory_order_relaxed);
224 }
225
226
16/64
✓ Branch 0 taken 48135 times.
✓ Branch 1 taken 14 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 48135 times.
✓ Branch 4 taken 14 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 14 times.
✓ Branch 8 taken 1789 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1789 times.
✓ Branch 12 taken 65742 times.
✓ Branch 13 taken 11 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 65742 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✓ Branch 20 taken 5618 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 5618 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 63 taken 2 times.
121327x if (io_done || op.cancelled.load(std::memory_order_acquire))
227 {
228
2/32
✓ Branch 0 taken 14 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 11 times.
✗ 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.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ 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.
25x svc_.post(&op);
229 25x svc_.work_finished();
230 25x }
231 else
232 {
233 121302x desc_slot = &op;
234 }
235 121327x }
236
237 template<class Derived, class ImplBase, class Service, class DescState>
238 template<class Op>
239 void
240 798x reactor_basic_socket<Derived, ImplBase, Service, DescState>::cancel_single_op(
241 Op& op) noexcept
242 {
243 798x auto self = this->weak_from_this().lock();
244
4/32
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 38 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 757 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ 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 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
798x if (!self)
245 return;
246
247 798x op.request_cancel();
248
249 798x auto* d = static_cast<Derived*>(this);
250 798x reactor_op_base** desc_op_ptr = d->op_to_desc_slot(op);
251
252
4/32
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 38 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 757 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✗ 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 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
798x if (desc_op_ptr)
253 {
254 798x reactor_op_base* claimed = nullptr;
255 {
256
4/32
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 38 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 757 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ 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 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
798x std::lock_guard lock(desc_state_.mutex);
257
5/32
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 38 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 757 times.
✓ Branch 10 taken 1 time.
✓ Branch 11 taken 1 time.
✗ 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 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
798x if (*desc_op_ptr == &op)
258 797x claimed = std::exchange(*desc_op_ptr, nullptr);
259 else
260 {
261 1x bool* cflag = d->op_to_cancel_flag(op);
262
1/32
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ 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 taken 1 time.
✗ 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 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ 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.
1x if (cflag)
263 1x *cflag = true;
264 }
265 798x }
266
5/32
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 38 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 757 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 time.
✓ Branch 11 taken 1 time.
✗ 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 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
798x if (claimed)
267 {
268 797x op.impl_ptr = self;
269
4/32
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 38 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 757 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 time.
✗ 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 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
797x svc_.post(&op);
270 797x svc_.work_finished();
271 797x }
272 798x }
273 798x }
274
275 template<class Derived, class ImplBase, class Service, class DescState>
276 void
277 reactor_basic_socket<Derived, ImplBase, Service, DescState>::
278 168x do_cancel() noexcept
279 {
280 168x auto self = this->weak_from_this().lock();
281
3/8
✓ Branch 0 taken 44 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 121 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
168x if (!self)
282 return;
283
284 168x auto* d = static_cast<Derived*>(this);
285
286 684x d->for_each_op([](auto& op) { op.request_cancel(); });
287
288 // Claim ops under a single lock acquisition
289 504x struct claimed_entry
290 {
291 504x reactor_op_base* op = nullptr;
292 504x reactor_op_base* base = nullptr;
293 };
294 // Max 3 ops (conn, rd, wr)
295 168x claimed_entry claimed[3];
296 168x int count = 0;
297
298 {
299
3/8
✓ Branch 0 taken 44 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 121 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
168x std::lock_guard lock(desc_state_.mutex);
300 684x d->for_each_desc_entry([&](auto& op, reactor_op_base*& desc_slot) {
301
18/32
✓ Branch 0 taken 44 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✓ Branch 3 taken 24 times.
✓ Branch 4 taken 44 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 121 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 63 times.
✓ Branch 9 taken 58 times.
✓ Branch 10 taken 121 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✓ Branch 13 taken 1 time.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 time.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 2 times.
✓ Branch 29 taken 1 time.
✓ Branch 30 taken 3 times.
✗ Branch 31 not taken.
516x if (desc_slot == &op)
302 {
303 86x claimed[count].op = std::exchange(desc_slot, nullptr);
304 86x claimed[count].base = &op;
305 86x ++count;
306 86x }
307 516x });
308 168x }
309
310
6/8
✓ Branch 0 taken 44 times.
✓ Branch 1 taken 24 times.
✓ Branch 2 taken 121 times.
✓ Branch 3 taken 59 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 3 times.
✓ Branch 7 taken 3 times.
254x for (int i = 0; i < count; ++i)
311 {
312 86x claimed[i].base->impl_ptr = self;
313
3/8
✓ Branch 0 taken 24 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 59 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
86x svc_.post(claimed[i].base);
314 86x svc_.work_finished();
315 86x }
316 168x }
317
318 template<class Derived, class ImplBase, class Service, class DescState>
319 void
320 reactor_basic_socket<Derived, ImplBase, Service, DescState>::
321 67346x do_close_socket() noexcept
322 {
323 67346x auto self = this->weak_from_this().lock();
324
4/8
✗ Branch 0 not taken.
✓ Branch 1 taken 16176 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 186 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 50798 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 186 times.
67346x if (self)
325 {
326 67346x auto* d = static_cast<Derived*>(this);
327
328 270128x d->for_each_op([](auto& op) { op.request_cancel(); });
329
330 202038x struct claimed_entry
331 {
332 202038x reactor_op_base* base = nullptr;
333 };
334 67346x claimed_entry claimed[3];
335 67346x int count = 0;
336
337 {
338
4/8
✓ Branch 0 taken 16176 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 186 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 50798 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 186 times.
✗ Branch 7 not taken.
67346x std::lock_guard lock(desc_state_.mutex);
339 134692x d->for_each_desc_entry(
340 270128x [&](auto& /*op*/, reactor_op_base*& desc_slot) {
341 202782x auto* c = std::exchange(desc_slot, nullptr);
342
20/32
✓ Branch 0 taken 16176 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 16175 times.
✓ Branch 3 taken 1 time.
✓ Branch 4 taken 16176 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 186 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 184 times.
✓ Branch 9 taken 2 times.
✓ Branch 10 taken 186 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 186 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 186 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 50798 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 50795 times.
✓ Branch 19 taken 3 times.
✓ Branch 20 taken 50798 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 186 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 184 times.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 186 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 186 times.
✗ Branch 29 not taken.
✓ Branch 30 taken 186 times.
✗ Branch 31 not taken.
202782x if (c)
343 {
344 8x claimed[count].base = c;
345 8x ++count;
346 8x }
347 202782x });
348 67346x desc_state_.read_ready = false;
349 67346x desc_state_.write_ready = false;
350 67346x desc_state_.read_cancel_pending = false;
351 67346x desc_state_.write_cancel_pending = false;
352 67346x desc_state_.connect_cancel_pending = false;
353
354
7/8
✓ Branch 0 taken 16148 times.
✓ Branch 1 taken 28 times.
✓ Branch 2 taken 186 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 48656 times.
✓ Branch 5 taken 2142 times.
✓ Branch 6 taken 165 times.
✓ Branch 7 taken 21 times.
67346x if (desc_state_.is_enqueued_.load(std::memory_order_acquire))
355 2191x desc_state_.impl_ref_ = self;
356 67346x }
357
358
8/8
✓ Branch 0 taken 16176 times.
✓ Branch 1 taken 1 time.
✓ Branch 2 taken 186 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 50798 times.
✓ Branch 5 taken 3 times.
✓ Branch 6 taken 186 times.
✓ Branch 7 taken 2 times.
67354x for (int i = 0; i < count; ++i)
359 {
360 8x claimed[i].base->impl_ptr = self;
361
4/8
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
8x svc_.post(claimed[i].base);
362 8x svc_.work_finished();
363 8x }
364 67346x }
365
366
8/8
✓ Branch 0 taken 3592 times.
✓ Branch 1 taken 12584 times.
✓ Branch 2 taken 45 times.
✓ Branch 3 taken 141 times.
✓ Branch 4 taken 11251 times.
✓ Branch 5 taken 39547 times.
✓ Branch 6 taken 45 times.
✓ Branch 7 taken 141 times.
67346x if (fd_ >= 0)
367 {
368
4/8
✓ Branch 0 taken 3592 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 45 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 11251 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 45 times.
✗ Branch 7 not taken.
14933x if (desc_state_.registered_events != 0)
369
4/8
✓ Branch 0 taken 3592 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 45 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 11251 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 45 times.
✗ Branch 7 not taken.
14933x svc_.scheduler().deregister_descriptor(fd_);
370
4/8
✓ Branch 0 taken 3592 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 45 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 11251 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 45 times.
✗ Branch 7 not taken.
14933x ::close(fd_);
371 14933x fd_ = -1;
372 14933x }
373
374 67346x desc_state_.fd = -1;
375 67346x desc_state_.registered_events = 0;
376
377 67346x local_endpoint_ = endpoint{};
378 67346x }
379
380 } // namespace boost::corosio::detail
381
382 #endif // BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_BASIC_SOCKET_HPP
383