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

95.2% Lines (140/147) 86.6% List of functions (123/142) 29.2% Branches (215/736)
reactor_basic_socket.hpp
f(x) Functions (142)
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 16035x 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 52x 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 5247x 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 52x 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 16035x 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 52x 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 5247x 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 52x 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 35304x 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 252x 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 10699x 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 252x 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 24x 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 18x 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 24x 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 18x 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 5307x 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 1737x 0.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_bind(boost::corosio::endpoint) :136 6x 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_bind(boost::corosio::endpoint) :136 28x 100.0% 60.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_bind(boost::corosio::endpoint) :136 6x 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_bind(boost::corosio::endpoint) :136 28x 100.0% 90.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 5309x 85.7% 40.6% 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 63489x 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 9x 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 1739x 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 47912x 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 1x 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_from_op>(boost::corosio::detail::select_recv_from_op&, boost::corosio::detail::reactor_op_base*&, bool&, bool&) :201 12x 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 656x 100.0% 78.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% 25.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_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 30x 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 117x 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 42x 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 117x 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 117x 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 117x 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 42x 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 42x 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 42x 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 702x 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 252x 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 117x 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 117x 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 117x 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 42x 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 42x 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 42x 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 48039x 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 200x 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 15753x 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 200x 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 48039x 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 48039x 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 48039x 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 200x 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 200x 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 200x 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 200x 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 200x 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 15753x 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 15753x 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 15753x 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 200x 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 200x 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 200x 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 200x 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 200x 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 288234x 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 1200x 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 94518x 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 1200x 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 48039x 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 48039x 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 48039x 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 200x 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 200x 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 200x 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 200x 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 200x 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 15753x 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 15753x 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 15753x 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 200x 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 200x 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 200x 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 200x 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 200x 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 42772x explicit reactor_basic_socket(Service& svc) noexcept : svc_(svc) {}
61
62 protected:
63 Service& svc_;
64 21386x int fd_ = -1;
65 endpoint local_endpoint_;
66
67 public:
68 /// Per-descriptor state for persistent reactor registration.
69 DescState desc_state_;
70
71 21386x ~reactor_basic_socket() override = default;
72
73 /// Return the underlying file descriptor.
74 46507x native_handle_type native_handle() const noexcept override
75 {
76 46507x return fd_;
77 }
78
79 /// Return the cached local endpoint.
80 84x endpoint local_endpoint() const noexcept override
81 {
82 84x 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 7044x void set_socket(int fd) noexcept
118 {
119 7044x fd_ = fd;
120 7044x }
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 68x std::error_code do_bind(endpoint ep) noexcept
137 {
138 68x sockaddr_storage storage{};
139 68x socklen_t addrlen = to_sockaddr(ep, socket_family(fd_), storage);
140
12/16
✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 28 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 26 times.
✓ Branch 8 taken 6 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 4 times.
✓ Branch 12 taken 28 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 2 times.
✓ Branch 15 taken 26 times.
68x if (::bind(fd_, reinterpret_cast<sockaddr*>(&storage), addrlen) != 0)
141
4/8
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
8x return make_err(errno);
142
143 60x sockaddr_storage local_storage{};
144 60x socklen_t local_len = sizeof(local_storage);
145
8/16
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 26 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 26 times.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 4 times.
✓ Branch 12 taken 26 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 26 times.
60x if (::getsockname(
146 60x fd_, reinterpret_cast<sockaddr*>(&local_storage), &local_len) ==
147 0)
148 60x local_endpoint_ = from_sockaddr(local_storage);
149
150 60x return {};
151 68x }
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 118475x 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 118475x svc_.work_started();
208
209
7/32
✓ Branch 0 taken 47912 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1739 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 63498 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 5309 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.
118475x std::lock_guard lock(desc_state_.mutex);
210 118475x bool io_done = false;
211
9/32
✓ Branch 0 taken 46331 times.
✓ Branch 1 taken 1581 times.
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1739 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 63282 times.
✓ Branch 7 taken 216 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 5309 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.
118475x if (ready_flag)
212 {
213 1797x ready_flag = false;
214 1797x op.perform_io();
215
4/32
✓ Branch 0 taken 1571 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 214 times.
✓ Branch 7 taken 2 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.
1797x io_done = (op.errn != EAGAIN && op.errn != EWOULDBLOCK);
216
4/32
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1571 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 214 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.
1797x if (!io_done)
217 1785x op.errn = 0;
218 1797x }
219
220
7/32
✓ Branch 0 taken 47912 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1739 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 63498 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 5309 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.
118475x 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 47902 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 47902 times.
✓ Branch 4 taken 13 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 13 times.
✓ Branch 8 taken 1739 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1739 times.
✓ Branch 12 taken 63496 times.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 63496 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✓ Branch 20 taken 5309 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 5309 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.
118475x if (io_done || op.cancelled.load(std::memory_order_acquire))
227 {
228
2/32
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 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.
12x svc_.post(&op);
229 12x svc_.work_finished();
230 12x }
231 else
232 {
233 118463x desc_slot = &op;
234 }
235 118475x }
236
237 template<class Derived, class ImplBase, class Service, class DescState>
238 template<class Op>
239 void
240 689x reactor_basic_socket<Derived, ImplBase, Service, DescState>::cancel_single_op(
241 Op& op) noexcept
242 {
243 689x auto self = this->weak_from_this().lock();
244
4/32
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 656 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.
689x if (!self)
245 return;
246
247 689x op.request_cancel();
248
249 689x auto* d = static_cast<Derived*>(this);
250 689x 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 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 656 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.
689x if (desc_op_ptr)
253 {
254 689x reactor_op_base* claimed = nullptr;
255 {
256
4/32
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 656 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.
689x std::lock_guard lock(desc_state_.mutex);
257
6/32
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✓ Branch 9 taken 655 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.
689x if (*desc_op_ptr == &op)
258 687x claimed = std::exchange(*desc_op_ptr, nullptr);
259 else
260 {
261 2x bool* cflag = d->op_to_cancel_flag(op);
262
2/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 taken 1 time.
✗ 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.
2x if (cflag)
263 2x *cflag = true;
264 }
265 689x }
266
6/32
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 655 times.
✓ Branch 9 taken 1 time.
✓ 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.
689x if (claimed)
267 {
268 687x op.impl_ptr = self;
269
4/32
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 655 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.
687x svc_.post(&op);
270 687x svc_.work_finished();
271 687x }
272 689x }
273 689x }
274
275 template<class Derived, class ImplBase, class Service, class DescState>
276 void
277 reactor_basic_socket<Derived, ImplBase, Service, DescState>::
278 165x do_cancel() noexcept
279 {
280 165x auto self = this->weak_from_this().lock();
281
3/8
✓ Branch 0 taken 42 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
165x if (!self)
282 return;
283
284 165x auto* d = static_cast<Derived*>(this);
285
286 672x d->for_each_op([](auto& op) { op.request_cancel(); });
287
288 // Claim ops under a single lock acquisition
289 495x struct claimed_entry
290 {
291 495x reactor_op_base* op = nullptr;
292 495x reactor_op_base* base = nullptr;
293 };
294 // Max 3 ops (conn, rd, wr)
295 165x claimed_entry claimed[3];
296 165x int count = 0;
297
298 {
299
3/8
✓ Branch 0 taken 42 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
165x std::lock_guard lock(desc_state_.mutex);
300 672x d->for_each_desc_entry([&](auto& op, reactor_op_base*& desc_slot) {
301
18/32
✓ Branch 0 taken 42 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 19 times.
✓ Branch 3 taken 23 times.
✓ Branch 4 taken 42 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 120 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 62 times.
✓ Branch 9 taken 58 times.
✓ Branch 10 taken 120 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.
507x if (desc_slot == &op)
302 {
303 85x claimed[count].op = std::exchange(desc_slot, nullptr);
304 85x claimed[count].base = &op;
305 85x ++count;
306 85x }
307 507x });
308 165x }
309
310
6/8
✓ Branch 0 taken 42 times.
✓ Branch 1 taken 23 times.
✓ Branch 2 taken 120 times.
✓ Branch 3 taken 59 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 3 times.
✓ Branch 7 taken 3 times.
250x for (int i = 0; i < count; ++i)
311 {
312 85x claimed[i].base->impl_ptr = self;
313
3/8
✓ Branch 0 taken 23 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.
85x svc_.post(claimed[i].base);
314 85x svc_.work_finished();
315 85x }
316 165x }
317
318 template<class Derived, class ImplBase, class Service, class DescState>
319 void
320 reactor_basic_socket<Derived, ImplBase, Service, DescState>::
321 64192x do_close_socket() noexcept
322 {
323 64192x auto self = this->weak_from_this().lock();
324
4/8
✗ Branch 0 not taken.
✓ Branch 1 taken 15753 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 200 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 48039 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 200 times.
64192x if (self)
325 {
326 64192x auto* d = static_cast<Derived*>(this);
327
328 257568x d->for_each_op([](auto& op) { op.request_cancel(); });
329
330 192576x struct claimed_entry
331 {
332 192576x reactor_op_base* base = nullptr;
333 };
334 64192x claimed_entry claimed[3];
335 64192x int count = 0;
336
337 {
338
4/8
✓ Branch 0 taken 15753 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 200 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 48039 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 200 times.
✗ Branch 7 not taken.
64192x std::lock_guard lock(desc_state_.mutex);
339 128384x d->for_each_desc_entry(
340 257568x [&](auto& /*op*/, reactor_op_base*& desc_slot) {
341 193376x auto* c = std::exchange(desc_slot, nullptr);
342
20/32
✓ Branch 0 taken 15753 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15752 times.
✓ Branch 3 taken 1 time.
✓ Branch 4 taken 15753 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 200 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 198 times.
✓ Branch 9 taken 2 times.
✓ Branch 10 taken 200 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 200 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 200 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 48039 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 48036 times.
✓ Branch 19 taken 3 times.
✓ Branch 20 taken 48039 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 200 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 198 times.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 200 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 200 times.
✗ Branch 29 not taken.
✓ Branch 30 taken 200 times.
✗ Branch 31 not taken.
193376x if (c)
343 {
344 8x claimed[count].base = c;
345 8x ++count;
346 8x }
347 193376x });
348 64192x desc_state_.read_ready = false;
349 64192x desc_state_.write_ready = false;
350 64192x desc_state_.read_cancel_pending = false;
351 64192x desc_state_.write_cancel_pending = false;
352 64192x desc_state_.connect_cancel_pending = false;
353
354
7/8
✓ Branch 0 taken 15728 times.
✓ Branch 1 taken 25 times.
✓ Branch 2 taken 200 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 46322 times.
✓ Branch 5 taken 1717 times.
✓ Branch 6 taken 185 times.
✓ Branch 7 taken 15 times.
64192x if (desc_state_.is_enqueued_.load(std::memory_order_acquire))
355 1757x desc_state_.impl_ref_ = self;
356 64192x }
357
358
8/8
✓ Branch 0 taken 15753 times.
✓ Branch 1 taken 1 time.
✓ Branch 2 taken 200 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 48039 times.
✓ Branch 5 taken 3 times.
✓ Branch 6 taken 200 times.
✓ Branch 7 taken 2 times.
64200x 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 64192x }
365
366
8/8
✓ Branch 0 taken 3498 times.
✓ Branch 1 taken 12255 times.
✓ Branch 2 taken 48 times.
✓ Branch 3 taken 152 times.
✓ Branch 4 taken 10638 times.
✓ Branch 5 taken 37401 times.
✓ Branch 6 taken 48 times.
✓ Branch 7 taken 152 times.
64192x if (fd_ >= 0)
367 {
368
4/8
✓ Branch 0 taken 3498 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 48 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10638 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 48 times.
✗ Branch 7 not taken.
14232x if (desc_state_.registered_events != 0)
369
4/8
✓ Branch 0 taken 3498 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 48 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10638 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 48 times.
✗ Branch 7 not taken.
14232x svc_.scheduler().deregister_descriptor(fd_);
370
4/8
✓ Branch 0 taken 3498 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 48 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10638 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 48 times.
✗ Branch 7 not taken.
14232x ::close(fd_);
371 14232x fd_ = -1;
372 14232x }
373
374 64192x desc_state_.fd = -1;
375 64192x desc_state_.registered_events = 0;
376
377 64192x local_endpoint_ = endpoint{};
378 64192x }
379
380 } // namespace boost::corosio::detail
381
382 #endif // BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_BASIC_SOCKET_HPP
383