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

97.5% Lines (237/247) 93.0% List of functions (238/264) 28.9% Branches (187/648)
reactor_op.hpp
f(x) Functions (264)
Function Calls Lines Branches Blocks
boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor>::~reactor_op() :49 992x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor>::~reactor_op() :49 1154x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor>::~reactor_op() :49 91680x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor>::~reactor_op() :49 1280x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor>::~reactor_op() :49 960x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor>::~reactor_op() :49 1122x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor>::~reactor_op() :49 33000x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor>::~reactor_op() :49 1240x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor>::reactor_op() :65 992x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor>::reactor_op() :65 1154x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor>::reactor_op() :65 91680x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor>::reactor_op() :65 1280x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor>::reactor_op() :65 960x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor>::reactor_op() :65 1122x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor>::reactor_op() :65 33000x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor>::reactor_op() :65 1240x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor>::reset() :68 78x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor>::reset() :68 619x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor>::reset() :68 501497x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor>::reset() :68 150x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor>::reset() :68 72x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor>::reset() :68 614x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor>::reset() :68 480556x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor>::reset() :68 147x 0.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor>::is_read_operation() const :80 24x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor>::is_read_operation() const :80 268x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor>::is_read_operation() const :80 48394x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor>::is_read_operation() const :80 35x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor>::is_read_operation() const :80 22x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor>::is_read_operation() const :80 268x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor>::is_read_operation() const :80 42625x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor>::is_read_operation() const :80 33x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor>::on_cancel() :90 13x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor>::on_cancel() :90 14x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor>::on_cancel() :90 684x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor>::on_cancel() :90 17x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor>::on_cancel() :90 13x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor>::on_cancel() :90 14x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor>::on_cancel() :90 73x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor>::on_cancel() :90 15x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor>::destroy() :96 3x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor>::destroy() :96 10x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor>::destroy() :96 15x 0.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor>::destroy() :96 5x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor>::destroy() :96 2x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor>::destroy() :96 7x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor>::destroy() :96 11x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor>::destroy() :96 4x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor>::start(std::__1::stop_token const&, boost::corosio::detail::kqueue_local_datagram_socket*) :103 58x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor>::start(std::__1::stop_token const&, boost::corosio::detail::kqueue_local_stream_socket*) :103 575x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor>::start(std::__1::stop_token const&, boost::corosio::detail::kqueue_tcp_socket*) :103 123646x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor>::start(std::__1::stop_token const&, boost::corosio::detail::kqueue_udp_socket*) :103 115x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor>::start(std::__1::stop_token const&, boost::corosio::detail::select_local_datagram_socket*) :103 54x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor>::start(std::__1::stop_token const&, boost::corosio::detail::select_local_stream_socket*) :103 573x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor>::start(std::__1::stop_token const&, boost::corosio::detail::select_tcp_socket*) :103 111681x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor>::start(std::__1::stop_token const&, boost::corosio::detail::select_udp_socket*) :103 117x 0.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor>::start(std::__1::stop_token const&, boost::corosio::detail::kqueue_local_stream_acceptor*) :111 27x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor>::start(std::__1::stop_token const&, boost::corosio::detail::kqueue_tcp_acceptor*) :111 4696x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor>::start(std::__1::stop_token const&, boost::corosio::detail::select_local_stream_acceptor*) :111 26x 100.0% 100.0% boost::corosio::detail::reactor_op<boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor>::start(std::__1::stop_token const&, boost::corosio::detail::select_tcp_acceptor*) :111 1779x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::reactor_connect_op() :128 124x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::~reactor_connect_op() :128 124x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::reactor_connect_op() :128 160x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::~reactor_connect_op() :128 160x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::reactor_connect_op() :128 120x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::~reactor_connect_op() :128 120x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::reactor_connect_op() :128 155x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::~reactor_connect_op() :128 155x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::reactor_connect_op() :128 157x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::~reactor_connect_op() :128 157x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::reactor_connect_op() :128 14356x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::~reactor_connect_op() :128 14356x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::reactor_connect_op() :128 153x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::~reactor_connect_op() :128 153x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::reactor_connect_op() :128 5330x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::~reactor_connect_op() :128 5330x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::reset() :134 4x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::reset() :134 19x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::reset() :134 4x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::reset() :134 19x 0.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::reset() :134 18x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::reset() :134 4648x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::reset() :134 17x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::reset() :134 1748x 100.0% 100.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::perform_io() :140 0 90.5% 15.4% 0.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::perform_io() :140 0 100.0% 0.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::perform_io() :140 0 100.0% 0.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::perform_io() :140 0 100.0% 0.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::perform_io() :140 0 100.0% 0.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::perform_io() :140 4625x 71.4% 23.1% 88.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::perform_io() :140 0 0.0% 0.0% 0.0% boost::corosio::detail::reactor_connect_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::perform_io() :140 1743x 71.4% 23.1% 88.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>>::reactor_wait_op() :192 372x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>>::~reactor_wait_op() :192 372x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::reactor_wait_op() :192 480x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::~reactor_wait_op() :192 480x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>>::reactor_wait_op() :192 360x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>>::~reactor_wait_op() :192 360x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::reactor_wait_op() :192 465x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::~reactor_wait_op() :192 465x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>>::reactor_wait_op() :192 630x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>>::~reactor_wait_op() :192 630x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::reactor_wait_op() :192 47226x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::~reactor_wait_op() :192 47226x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>>::reactor_wait_op() :192 612x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>>::~reactor_wait_op() :192 612x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::reactor_wait_op() :192 16755x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::~reactor_wait_op() :192 16755x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>>::reset() :197 9x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::reset() :197 15x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>>::reset() :197 9x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::reset() :197 15x 0.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>>::reset() :197 17x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::reset() :197 50x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>>::reset() :197 17x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::reset() :197 48x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>>::is_read_operation() const :203 0 0.0% 0.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::is_read_operation() const :203 0 100.0% 0.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>>::is_read_operation() const :203 0 100.0% 0.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::is_read_operation() const :203 0 100.0% 0.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>>::is_read_operation() const :203 0 100.0% 0.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::is_read_operation() const :203 0 0.0% 0.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>>::is_read_operation() const :203 0 0.0% 0.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::is_read_operation() const :203 0 0.0% 0.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>>::probe(int, unsigned int, int&) :223 16x 90.0% 16.7% 59.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::probe(int, unsigned int, int&) :223 30x 100.0% 59.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>>::probe(int, unsigned int, int&) :223 16x 90.0% 14.1% 59.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::probe(int, unsigned int, int&) :223 29x 0.0% 0.0% 59.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>>::probe(int, unsigned int, int&) :223 28x 100.0% 59.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::probe(int, unsigned int, int&) :223 90x 65.0% 20.8% 88.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>>::probe(int, unsigned int, int&) :223 29x 90.0% 37.5% 59.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::probe(int, unsigned int, int&) :223 86x 90.0% 37.5% 88.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>>::perform_io() :261 7x 100.0% 18.8% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::perform_io() :261 14x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>>::perform_io() :261 7x 100.0% 37.5% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::perform_io() :261 13x 0.0% 0.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>>::perform_io() :261 9x 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::perform_io() :261 32x 100.0% 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>>::perform_io() :261 10x 100.0% 100.0% 100.0% boost::corosio::detail::reactor_wait_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::perform_io() :261 27x 100.0% 100.0% 100.0% boost::corosio::detail::reactor_read_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>>::reactor_read_op() :278 157x 100.0% 100.0% boost::corosio::detail::reactor_read_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>>::~reactor_read_op() :278 157x 100.0% 100.0% boost::corosio::detail::reactor_read_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::reactor_read_op() :278 14356x 100.0% 100.0% boost::corosio::detail::reactor_read_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::~reactor_read_op() :278 14356x 100.0% 100.0% boost::corosio::detail::reactor_read_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>>::reactor_read_op() :278 153x 100.0% 100.0% boost::corosio::detail::reactor_read_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>>::~reactor_read_op() :278 153x 100.0% 100.0% boost::corosio::detail::reactor_read_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::reactor_read_op() :278 5330x 100.0% 100.0% boost::corosio::detail::reactor_read_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::~reactor_read_op() :278 5330x 100.0% 100.0% boost::corosio::detail::reactor_read_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>>::is_read_operation() const :293 272x 100.0% 100.0% boost::corosio::detail::reactor_read_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::is_read_operation() const :293 70567x 100.0% 100.0% boost::corosio::detail::reactor_read_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>>::is_read_operation() const :293 273x 100.0% 100.0% boost::corosio::detail::reactor_read_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::is_read_operation() const :293 67273x 100.0% 100.0% boost::corosio::detail::reactor_read_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>>::reset() :298 284x 100.0% 100.0% boost::corosio::detail::reactor_read_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::reset() :298 229025x 100.0% 100.0% boost::corosio::detail::reactor_read_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>>::reset() :298 283x 100.0% 100.0% boost::corosio::detail::reactor_read_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::reset() :298 237864x 100.0% 100.0% boost::corosio::detail::reactor_read_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>>::perform_io() :305 256x 100.0% 35.0% 61.0% boost::corosio::detail::reactor_read_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::perform_io() :305 31472x 88.9% 30.0% 92.0% boost::corosio::detail::reactor_read_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>>::perform_io() :305 257x 88.9% 15.0% 61.0% boost::corosio::detail::reactor_read_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::perform_io() :305 26336x 100.0% 70.0% 92.0% boost::corosio::detail::reactor_write_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::detail::kqueue_traits::write_policy>::reactor_write_op() :330 157x 100.0% 100.0% boost::corosio::detail::reactor_write_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::detail::kqueue_traits::write_policy>::~reactor_write_op() :330 157x 100.0% 100.0% boost::corosio::detail::reactor_write_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::detail::kqueue_traits::write_policy>::reactor_write_op() :330 14356x 100.0% 100.0% boost::corosio::detail::reactor_write_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::detail::kqueue_traits::write_policy>::~reactor_write_op() :330 14356x 100.0% 100.0% boost::corosio::detail::reactor_write_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::detail::select_traits::write_policy>::reactor_write_op() :330 153x 100.0% 100.0% boost::corosio::detail::reactor_write_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::detail::select_traits::write_policy>::~reactor_write_op() :330 153x 100.0% 100.0% boost::corosio::detail::reactor_write_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::detail::select_traits::write_policy>::reactor_write_op() :330 5330x 100.0% 100.0% boost::corosio::detail::reactor_write_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::detail::select_traits::write_policy>::~reactor_write_op() :330 5330x 100.0% 100.0% boost::corosio::detail::reactor_write_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::detail::kqueue_traits::write_policy>::reset() :344 279x 100.0% 100.0% boost::corosio::detail::reactor_write_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::detail::kqueue_traits::write_policy>::reset() :344 263095x 100.0% 100.0% boost::corosio::detail::reactor_write_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::detail::select_traits::write_policy>::reset() :344 277x 100.0% 100.0% boost::corosio::detail::reactor_write_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::detail::select_traits::write_policy>::reset() :344 239133x 100.0% 100.0% boost::corosio::detail::reactor_write_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::detail::kqueue_traits::write_policy>::perform_io() :350 255x 100.0% 31.2% 83.0% boost::corosio::detail::reactor_write_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::detail::kqueue_traits::write_policy>::perform_io() :350 254x 0.0% 0.0% 83.0% boost::corosio::detail::reactor_write_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::detail::select_traits::write_policy>::perform_io() :350 254x 100.0% 25.0% 50.0% boost::corosio::detail::reactor_write_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::detail::select_traits::write_policy>::perform_io() :350 256x 100.0% 50.0% 83.0% boost::corosio::detail::reactor_accept_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::detail::kqueue_traits::accept_policy>::reactor_accept_op() :369 53x 100.0% 100.0% boost::corosio::detail::reactor_accept_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::detail::kqueue_traits::accept_policy>::~reactor_accept_op() :369 53x 100.0% 100.0% boost::corosio::detail::reactor_accept_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::detail::kqueue_traits::accept_policy>::reactor_accept_op() :369 1386x 100.0% 100.0% boost::corosio::detail::reactor_accept_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::detail::kqueue_traits::accept_policy>::~reactor_accept_op() :369 1386x 100.0% 100.0% boost::corosio::detail::reactor_accept_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::detail::select_traits::accept_policy>::reactor_accept_op() :369 51x 100.0% 100.0% boost::corosio::detail::reactor_accept_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::detail::select_traits::accept_policy>::~reactor_accept_op() :369 51x 100.0% 100.0% boost::corosio::detail::reactor_accept_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::detail::select_traits::accept_policy>::reactor_accept_op() :369 255x 100.0% 100.0% boost::corosio::detail::reactor_accept_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::detail::select_traits::accept_policy>::~reactor_accept_op() :369 255x 100.0% 100.0% boost::corosio::detail::reactor_accept_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::detail::kqueue_traits::accept_policy>::reset() :386 21x 100.0% 100.0% boost::corosio::detail::reactor_accept_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::detail::kqueue_traits::accept_policy>::reset() :386 4679x 100.0% 100.0% boost::corosio::detail::reactor_accept_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::detail::select_traits::accept_policy>::reset() :386 20x 100.0% 100.0% boost::corosio::detail::reactor_accept_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::detail::select_traits::accept_policy>::reset() :386 1763x 100.0% 100.0% boost::corosio::detail::reactor_accept_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::detail::kqueue_traits::accept_policy>::perform_io() :396 12x 100.0% 25.0% 66.0% boost::corosio::detail::reactor_accept_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_tcp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::detail::kqueue_traits::accept_policy>::perform_io() :396 4605x 88.9% 25.0% 50.0% boost::corosio::detail::reactor_accept_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>, boost::corosio::detail::select_traits::accept_policy>::perform_io() :396 11x 88.9% 12.5% 50.0% boost::corosio::detail::reactor_accept_op<boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::detail::select_traits::accept_policy>::perform_io() :396 1714x 100.0% 50.0% 83.0% boost::corosio::detail::reactor_send_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>>::reactor_send_op() :419 124x 100.0% 100.0% boost::corosio::detail::reactor_send_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>>::~reactor_send_op() :419 124x 100.0% 100.0% boost::corosio::detail::reactor_send_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::reactor_send_op() :419 160x 100.0% 100.0% boost::corosio::detail::reactor_send_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::~reactor_send_op() :419 160x 100.0% 100.0% boost::corosio::detail::reactor_send_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>>::reactor_send_op() :419 120x 100.0% 100.0% boost::corosio::detail::reactor_send_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>>::~reactor_send_op() :419 120x 100.0% 100.0% boost::corosio::detail::reactor_send_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::reactor_send_op() :419 155x 100.0% 100.0% boost::corosio::detail::reactor_send_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::~reactor_send_op() :419 155x 100.0% 100.0% boost::corosio::detail::reactor_send_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>>::reset() :433 17x 100.0% 100.0% boost::corosio::detail::reactor_send_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::reset() :433 15x 100.0% 100.0% boost::corosio::detail::reactor_send_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>>::reset() :433 16x 100.0% 100.0% boost::corosio::detail::reactor_send_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::reset() :433 15x 0.0% 100.0% boost::corosio::detail::reactor_send_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>>::perform_io() :440 0 92.3% 25.0% 0.0% boost::corosio::detail::reactor_send_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::perform_io() :440 1x 100.0% 84.0% boost::corosio::detail::reactor_send_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>>::perform_io() :440 0 0.0% 0.0% 0.0% boost::corosio::detail::reactor_send_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::perform_io() :440 1x 0.0% 0.0% 84.0% boost::corosio::detail::reactor_recv_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>>::reactor_recv_op() :475 124x 100.0% 100.0% boost::corosio::detail::reactor_recv_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>>::~reactor_recv_op() :475 124x 100.0% 100.0% boost::corosio::detail::reactor_recv_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::reactor_recv_op() :475 160x 100.0% 100.0% boost::corosio::detail::reactor_recv_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::~reactor_recv_op() :475 160x 100.0% 100.0% boost::corosio::detail::reactor_recv_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>>::reactor_recv_op() :475 120x 100.0% 100.0% boost::corosio::detail::reactor_recv_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>>::~reactor_recv_op() :475 120x 100.0% 100.0% boost::corosio::detail::reactor_recv_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::reactor_recv_op() :475 155x 100.0% 100.0% boost::corosio::detail::reactor_recv_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::~reactor_recv_op() :475 155x 100.0% 100.0% boost::corosio::detail::reactor_recv_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>>::is_read_operation() const :492 boost::corosio::detail::reactor_recv_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::is_read_operation() const :492 boost::corosio::detail::reactor_recv_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>>::is_read_operation() const :492 boost::corosio::detail::reactor_recv_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::is_read_operation() const :492 boost::corosio::detail::reactor_recv_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>>::reset() :498 19x 100.0% 100.0% boost::corosio::detail::reactor_recv_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::reset() :498 12x 100.0% 100.0% boost::corosio::detail::reactor_recv_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>>::reset() :498 18x 100.0% 100.0% boost::corosio::detail::reactor_recv_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::reset() :498 17x 0.0% 100.0% boost::corosio::detail::reactor_recv_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>>::perform_io() :505 1x 91.7% 25.0% 61.0% boost::corosio::detail::reactor_recv_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::perform_io() :505 4x 100.0% 84.0% boost::corosio::detail::reactor_recv_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>>::perform_io() :505 1x 91.7% 22.5% 61.0% boost::corosio::detail::reactor_recv_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::perform_io() :505 4x 0.0% 0.0% 84.0% boost::corosio::detail::reactor_send_to_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>>::reactor_send_to_op() :532 124x 100.0% 100.0% boost::corosio::detail::reactor_send_to_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>>::~reactor_send_to_op() :532 124x 100.0% 100.0% boost::corosio::detail::reactor_send_to_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::reactor_send_to_op() :532 160x 100.0% 100.0% boost::corosio::detail::reactor_send_to_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::~reactor_send_to_op() :532 160x 100.0% 100.0% boost::corosio::detail::reactor_send_to_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>>::reactor_send_to_op() :532 120x 100.0% 100.0% boost::corosio::detail::reactor_send_to_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>>::~reactor_send_to_op() :532 120x 100.0% 100.0% boost::corosio::detail::reactor_send_to_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::reactor_send_to_op() :532 155x 100.0% 100.0% boost::corosio::detail::reactor_send_to_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::~reactor_send_to_op() :532 155x 100.0% 100.0% boost::corosio::detail::reactor_send_to_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>>::reset() :552 15x 100.0% 100.0% boost::corosio::detail::reactor_send_to_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::reset() :552 39x 100.0% 100.0% boost::corosio::detail::reactor_send_to_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>>::reset() :552 13x 100.0% 100.0% boost::corosio::detail::reactor_send_to_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::reset() :552 36x 0.0% 100.0% boost::corosio::detail::reactor_send_to_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>>::perform_io() :561 0 93.3% 25.0% 0.0% boost::corosio::detail::reactor_send_to_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>>::perform_io() :561 1x 100.0% 84.0% boost::corosio::detail::reactor_send_to_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>>::perform_io() :561 0 0.0% 0.0% 0.0% boost::corosio::detail::reactor_send_to_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>>::perform_io() :561 1x 0.0% 0.0% 84.0% boost::corosio::detail::reactor_recv_from_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::reactor_recv_from_op() :597 124x 100.0% 100.0% boost::corosio::detail::reactor_recv_from_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::~reactor_recv_from_op() :597 124x 100.0% 100.0% boost::corosio::detail::reactor_recv_from_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::reactor_recv_from_op() :597 160x 100.0% 100.0% boost::corosio::detail::reactor_recv_from_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::~reactor_recv_from_op() :597 160x 100.0% 100.0% boost::corosio::detail::reactor_recv_from_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::reactor_recv_from_op() :597 120x 100.0% 100.0% boost::corosio::detail::reactor_recv_from_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::~reactor_recv_from_op() :597 120x 100.0% 100.0% boost::corosio::detail::reactor_recv_from_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::reactor_recv_from_op() :597 155x 100.0% 100.0% boost::corosio::detail::reactor_recv_from_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::~reactor_recv_from_op() :597 155x 100.0% 100.0% boost::corosio::detail::reactor_recv_from_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::is_read_operation() const :623 boost::corosio::detail::reactor_recv_from_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::is_read_operation() const :623 boost::corosio::detail::reactor_recv_from_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::is_read_operation() const :623 boost::corosio::detail::reactor_recv_from_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::is_read_operation() const :623 boost::corosio::detail::reactor_recv_from_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::reset() :629 14x 100.0% 100.0% boost::corosio::detail::reactor_recv_from_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::reset() :629 50x 100.0% 100.0% boost::corosio::detail::reactor_recv_from_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::reset() :629 12x 100.0% 100.0% boost::corosio::detail::reactor_recv_from_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::reset() :629 45x 0.0% 100.0% boost::corosio::detail::reactor_recv_from_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::perform_io() :639 2x 100.0% 37.5% 61.0% boost::corosio::detail::reactor_recv_from_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_udp_socket, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::perform_io() :639 11x 100.0% 92.0% boost::corosio::detail::reactor_recv_from_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_datagram_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::perform_io() :639 2x 93.8% 22.5% 61.0% boost::corosio::detail::reactor_recv_from_op<boost::corosio::detail::reactor_dgram_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_udp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>, boost::corosio::endpoint>::perform_io() :639 13x 0.0% 0.0% 84.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_OP_HPP
11 #define BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_OP_HPP
12
13 #include <boost/corosio/native/detail/reactor/reactor_events.hpp>
14 #include <boost/corosio/native/detail/reactor/reactor_op_base.hpp>
15 #include <boost/corosio/io/io_object.hpp>
16 #include <boost/corosio/endpoint.hpp>
17 #include <boost/capy/ex/executor_ref.hpp>
18
19 #include <atomic>
20 #include <cstddef>
21 #include <optional>
22 #include <stop_token>
23
24 #include <errno.h>
25 #include <poll.h>
26
27 #include <netinet/in.h>
28 #include <sys/socket.h>
29 #include <sys/uio.h>
30
31 namespace boost::corosio::detail {
32
33 /** Base operation for reactor-based backends.
34
35 Holds per-operation state that depends on the concrete backend
36 socket/acceptor types: coroutine handle, executor, output
37 pointers, file descriptor, stop_callback, and type-specific
38 impl pointers.
39
40 Fields shared across all backends (errn, bytes_transferred,
41 cancelled, impl_ptr, perform_io, complete) live in
42 reactor_op_base so the scheduler and descriptor_state can
43 access them without template instantiation.
44
45 @tparam Socket The backend socket impl type (forward-declared).
46 @tparam Acceptor The backend acceptor impl type (forward-declared).
47 */
48 template<class Socket, class Acceptor>
49 struct reactor_op : reactor_op_base
50 {
51 // The op envelope — coroutine handle h, cont, executor ex, ec_out,
52 // bytes_out, cancelled, stop_cb (+ its canceller), impl_ptr — lives in
53 // coro_op (via reactor_op_base) and is shared with io_uring/IOCP.
54 // reactor_op adds only the reactor-specific routing state below.
55
56 /// File descriptor this operation targets.
57 131428x int fd = -1;
58
59 /// Owning socket impl (for stop_token cancellation routing).
60 131428x Socket* socket_impl_ = nullptr;
61
62 /// Owning acceptor impl (for stop_token cancellation routing).
63 131428x Acceptor* acceptor_impl_ = nullptr;
64
65 262856x reactor_op() = default;
66
67 /// Reset operation state for reuse.
68 983733x void reset() noexcept
69 {
70 983733x fd = -1;
71 983733x errn = 0;
72 983733x bytes_transferred = 0;
73 983733x cancelled.store(false, std::memory_order_relaxed);
74 983733x impl_ptr.reset();
75 983733x socket_impl_ = nullptr;
76 983733x acceptor_impl_ = nullptr;
77 983733x }
78
79 /// Return true if this is a read-direction operation.
80 91669x virtual bool is_read_operation() const noexcept
81 {
82 91669x return false;
83 }
84
85 /// Cancel this operation via the owning impl.
86 virtual void cancel() noexcept = 0;
87
88 /// coro_op cancellation hook (fired by the shared canceller when the
89 /// stop_token requests cancellation): route to the impl-specific cancel().
90 843x void on_cancel() noexcept override
91 {
92 843x cancel();
93 843x }
94
95 /// Destroy without invoking.
96 57x void destroy() override
97 {
98 57x stop_cb.reset();
99 57x reactor_op_base::destroy();
100 57x }
101
102 /// Arm the stop-token callback for a socket operation.
103 236819x void start(std::stop_token const& token, Socket* impl)
104 {
105 236819x socket_impl_ = impl;
106 236819x acceptor_impl_ = nullptr;
107 236819x coro_op::start(token);
108 236819x }
109
110 /// Arm the stop-token callback for an acceptor operation.
111 6528x void start(std::stop_token const& token, Acceptor* impl)
112 {
113 6528x socket_impl_ = nullptr;
114 6528x acceptor_impl_ = impl;
115 6528x coro_op::start(token);
116 6528x }
117 };
118
119 /** Shared connect operation.
120
121 Checks SO_ERROR for connect completion status. The operator()()
122 and cancel() are provided by the concrete backend type.
123
124 @tparam Base The backend's base op type.
125 @tparam Endpoint The endpoint type (endpoint or local_endpoint).
126 */
127 template<class Base, class Endpoint = endpoint>
128 struct reactor_connect_op : Base
129 {
130 /// Endpoint to connect to.
131 Endpoint target_endpoint;
132
133 /// Reset operation state for reuse.
134 6477x void reset() noexcept
135 {
136 6477x Base::reset();
137 6477x target_endpoint = Endpoint{};
138 6477x }
139
140 6368x void perform_io() noexcept override
141 {
142 // A readiness notification does not prove the handshake
143 // finished: fresh sockets raise a spurious writable event,
144 // and a cached edge can trigger this check while the connect
145 // is still in flight — where SO_ERROR also reads 0. Probe
146 // writability first and report EAGAIN to stay parked;
147 // SO_ERROR decides only once the socket is actually writable.
148 6368x pollfd pfd{};
149 6368x pfd.fd = this->fd;
150 6368x pfd.events = POLLOUT;
151 int r;
152 6368x do
153 {
154
3/16
✓ Branch 0 taken 4581 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1718 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 69 times.
✗ 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.
6368x r = ::poll(&pfd, 1, 0);
155 12736x }
156
7/32
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 4580 times.
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1718 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 time.
✓ Branch 17 taken 68 times.
✓ Branch 18 taken 1 time.
✗ 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.
6368x while (r < 0 && errno == EINTR);
157
158
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 4581 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1718 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 69 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
6368x if (r == 0)
159 {
160 this->complete(EAGAIN, 0);
161 return;
162 }
163
5/16
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 4580 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1718 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 68 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
6368x if (r < 0)
164 {
165 // EAGAIN must not escape: it is the stay-parked sentinel.
166 2x this->complete(
167
10/80
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ 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.
✗ 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 taken 1 time.
✗ Branch 41 not taken.
✓ Branch 42 taken 1 time.
✗ Branch 43 not taken.
✓ Branch 44 taken 1 time.
✗ Branch 45 not taken.
✓ Branch 46 taken 1 time.
✗ Branch 47 not taken.
✓ Branch 48 taken 1 time.
✗ 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 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
✗ Branch 70 not taken.
✗ Branch 71 not taken.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✗ Branch 78 not taken.
✗ Branch 79 not taken.
2x (errno == EAGAIN || errno == EWOULDBLOCK) ? ENOMEM : errno, 0);
168 2x return;
169 }
170
171 6366x int err = 0;
172 6366x socklen_t len = sizeof(err);
173
8/32
✓ Branch 0 taken 4580 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 time.
✓ Branch 3 taken 4579 times.
✓ Branch 4 taken 1718 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1718 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 taken 68 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 1 time.
✓ Branch 19 taken 67 times.
✗ 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.
6366x if (::getsockopt(this->fd, SOL_SOCKET, SO_ERROR, &err, &len) < 0)
174
2/16
✓ Branch 0 taken 1 time.
✗ 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 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
2x err = errno;
175 6366x this->complete(err, 0);
176 6368x }
177 };
178
179 /** Readiness-only wait operation.
180
181 Completion is decided by probing the descriptor with a
182 zero-timeout `poll()`, never by the reactor's cached edge
183 events: a speculative read can drain the socket without
184 touching the reactor (stale edge), and a short read can
185 consume the edge while data remains buffered (missing edge).
186 `perform_io()` runs the probe and reports `EAGAIN` when the
187 condition does not currently hold, which keeps the op parked.
188
189 @tparam Base The backend's base op type.
190 */
191 template<class Base>
192 66900x struct reactor_wait_op : Base
193 {
194 /// Which event bit this wait targets (reactor_event_read/write/error).
195 66900x std::uint32_t wait_event = 0;
196
197 180x void reset() noexcept
198 {
199 180x Base::reset();
200 180x wait_event = 0;
201 180x }
202
203 bool is_read_operation() const noexcept override
204 {
205 return wait_event == reactor_event_read;
206 }
207
208 /** Check whether the waited-for condition currently holds.
209
210 Zero-timeout `poll()` probe. `POLLERR`/`POLLHUP` count as
211 ready for every wait type: the wait must not park on a
212 socket whose next I/O would fail immediately. The probe is
213 side-effect free — in particular it never reads `SO_ERROR`,
214 which is consume-on-read and belongs to whichever operation
215 observes the failure next.
216
217 @param fd The descriptor to probe.
218 @param event The event bit to probe for (read/write/error).
219 @param err Receives the probe failure, if any.
220
221 @return `true` if the condition holds or the probe failed.
222 */
223 324x static bool probe(int fd, std::uint32_t event, int& err) noexcept
224 {
225 // poll() silently ignores negative fds; without this guard a
226 // wait on a never-opened or closed socket parks forever.
227
7/16
✓ Branch 0 taken 130 times.
✓ Branch 1 taken 7 times.
✓ Branch 2 taken 145 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 5 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 28 times.
✓ Branch 11 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
324x if (fd < 0)
228 {
229 16x err = EBADF;
230 16x return true;
231 }
232
233 308x pollfd pfd{};
234 308x pfd.fd = fd;
235
8/16
✓ Branch 0 taken 84 times.
✓ Branch 1 taken 46 times.
✓ Branch 2 taken 97 times.
✓ Branch 3 taken 48 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 3 times.
✓ Branch 10 taken 22 times.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
308x if (event == reactor_event_read)
236 205x pfd.events = POLLIN;
237
8/16
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 26 times.
✓ Branch 2 taken 20 times.
✓ Branch 3 taken 28 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 2 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 4 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
103x else if (event == reactor_event_write)
238 43x pfd.events = POLLOUT;
239 else
240 60x pfd.events = POLLPRI;
241
242 int r;
243 308x do
244 {
245
4/16
✓ Branch 0 taken 130 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 145 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 5 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 28 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
308x r = ::poll(&pfd, 1, 0);
246 616x }
247
8/32
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 129 times.
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 145 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 time.
✓ Branch 17 taken 4 times.
✓ Branch 18 taken 1 time.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 28 times.
✗ 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.
308x while (r < 0 && errno == EINTR);
248
249
6/16
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 129 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 145 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 4 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 28 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
308x if (r < 0)
250 {
251 // Complete with the probe failure rather than park forever.
252 // EAGAIN must not escape here: callers treat it as the
253 // stay-parked sentinel, and poll() can fail with it on
254 // BSD/macOS under transient resource pressure.
255
10/80
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ 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.
✗ 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 taken 1 time.
✗ Branch 41 not taken.
✓ Branch 42 taken 1 time.
✗ Branch 43 not taken.
✓ Branch 44 taken 1 time.
✗ Branch 45 not taken.
✓ Branch 46 taken 1 time.
✗ Branch 47 not taken.
✓ Branch 48 taken 1 time.
✗ 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 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
✗ Branch 70 not taken.
✗ Branch 71 not taken.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✗ Branch 78 not taken.
✗ Branch 79 not taken.
2x err = (errno == EAGAIN || errno == EWOULDBLOCK) ? ENOMEM : errno;
256 2x return true;
257 }
258 306x return r != 0;
259 324x }
260
261 119x void perform_io() noexcept override
262 {
263 119x int err = 0;
264
7/16
✓ Branch 0 taken 12 times.
✓ Branch 1 taken 38 times.
✓ Branch 2 taken 12 times.
✓ Branch 3 taken 42 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 11 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
119x if (probe(this->fd, wait_event, err))
265 26x this->complete(err, 0);
266 else
267 93x this->complete(EAGAIN, 0);
268 119x }
269 };
270
271 /** Shared scatter-read operation.
272
273 Uses readv() with an EINTR retry loop.
274
275 @tparam Base The backend's base op type.
276 */
277 template<class Base>
278 19996x struct reactor_read_op : Base
279 {
280 /// Maximum scatter-gather buffer count.
281 static constexpr std::size_t max_buffers = 16;
282
283 /// Scatter-gather I/O vectors.
284 iovec iovecs[max_buffers];
285
286 /// Number of active I/O vectors.
287 19996x int iovec_count = 0;
288
289 /// True for zero-length reads (completed immediately).
290 19996x bool empty_buffer_read = false;
291
292 /// Return true (this is a read-direction operation).
293 138385x bool is_read_operation() const noexcept override
294 {
295 138385x return !empty_buffer_read;
296 }
297
298 467456x void reset() noexcept
299 {
300 467456x Base::reset();
301 467456x iovec_count = 0;
302 467456x empty_buffer_read = false;
303 467456x }
304
305 58321x void perform_io() noexcept override
306 {
307 ssize_t n;
308 58321x do
309 {
310
3/8
✓ Branch 0 taken 31718 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 26591 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
58321x n = ::readv(this->fd, iovecs, iovec_count);
311 116642x }
312
9/16
✓ Branch 0 taken 518 times.
✓ Branch 1 taken 31200 times.
✓ Branch 2 taken 518 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 495 times.
✓ Branch 5 taken 26096 times.
✓ Branch 6 taken 495 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 10 times.
✓ 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.
58321x while (n < 0 && errno == EINTR);
313
314
6/8
✓ Branch 0 taken 518 times.
✓ Branch 1 taken 31200 times.
✓ Branch 2 taken 495 times.
✓ Branch 3 taken 26096 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 10 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
58321x if (n >= 0)
315 57306x this->complete(0, static_cast<std::size_t>(n));
316 else
317
3/8
✓ Branch 0 taken 518 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 495 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
1015x this->complete(errno, 0);
318 58321x }
319 };
320
321 /** Shared gather-write operation.
322
323 Delegates the actual syscall to WritePolicy::write(fd, iovecs, count),
324 which returns ssize_t (bytes written or -1 with errno set).
325
326 @tparam Base The backend's base op type.
327 @tparam WritePolicy Provides `static ssize_t write(int, iovec*, int)`.
328 */
329 template<class Base, class WritePolicy>
330 19996x struct reactor_write_op : Base
331 {
332 /// The write syscall policy type.
333 using write_policy = WritePolicy;
334
335 /// Maximum scatter-gather buffer count.
336 static constexpr std::size_t max_buffers = 16;
337
338 /// Scatter-gather I/O vectors.
339 iovec iovecs[max_buffers];
340
341 /// Number of active I/O vectors.
342 19996x int iovec_count = 0;
343
344 502784x void reset() noexcept
345 {
346 502784x Base::reset();
347 502784x iovec_count = 0;
348 502784x }
349
350 1019x void perform_io() noexcept override
351 {
352 1019x ssize_t n = WritePolicy::write(this->fd, iovecs, iovec_count);
353
4/8
✓ Branch 0 taken 507 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 508 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 time.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
1019x if (n >= 0)
354 1015x this->complete(0, static_cast<std::size_t>(n));
355 else
356
2/8
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
4x this->complete(errno, 0);
357 1019x }
358 };
359
360 /** Shared accept operation.
361
362 Delegates the actual syscall to AcceptPolicy::do_accept(fd, peer_storage),
363 which returns the accepted fd or -1 with errno set.
364
365 @tparam Base The backend's base op type.
366 @tparam AcceptPolicy Provides `static int do_accept(int, sockaddr_storage&)`.
367 */
368 template<class Base, class AcceptPolicy>
369 1745x struct reactor_accept_op : Base
370 {
371 /// File descriptor of the accepted connection.
372 1745x int accepted_fd = -1;
373
374 /// Pointer to the peer socket implementation.
375 1745x io_object::implementation* peer_impl = nullptr;
376
377 /// Output pointer for the accepted implementation.
378 1745x io_object::implementation** impl_out = nullptr;
379
380 /// Peer address storage filled by accept.
381 1745x sockaddr_storage peer_storage{};
382
383 /// Peer address length returned by accept.
384 1745x socklen_t peer_addrlen = 0;
385
386 6483x void reset() noexcept
387 {
388 6483x Base::reset();
389 6483x accepted_fd = -1;
390 6483x peer_impl = nullptr;
391 6483x impl_out = nullptr;
392 6483x peer_storage = {};
393 6483x peer_addrlen = 0;
394 6483x }
395
396 6342x void perform_io() noexcept override
397 {
398 6342x int new_fd =
399 6342x AcceptPolicy::do_accept(this->fd, peer_storage, peer_addrlen);
400
5/8
✓ Branch 0 taken 4572 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1709 times.
✓ Branch 3 taken 1 time.
✓ Branch 4 taken 59 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 time.
6342x if (new_fd >= 0)
401 {
402 6340x accepted_fd = new_fd;
403 6340x this->complete(0, 0);
404 6340x }
405 else
406 {
407
2/8
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 7 not taken.
2x this->complete(errno, 0);
408 }
409 6342x }
410 };
411
412 /** Shared connected send operation for datagram sockets.
413
414 Uses sendmsg() with msg_name=nullptr (connected mode).
415
416 @tparam Base The backend's base op type.
417 */
418 template<class Base>
419 559x struct reactor_send_op : Base
420 {
421 /// Maximum scatter-gather buffer count.
422 static constexpr std::size_t max_buffers = 16;
423
424 /// Scatter-gather I/O vectors.
425 iovec iovecs[max_buffers];
426
427 /// Number of active I/O vectors.
428 559x int iovec_count = 0;
429
430 /// User-supplied message flags.
431 559x int msg_flags = 0;
432
433 63x void reset() noexcept
434 {
435 63x Base::reset();
436 63x iovec_count = 0;
437 63x msg_flags = 0;
438 63x }
439
440 2x void perform_io() noexcept override
441 {
442 2x msghdr msg{};
443 2x msg.msg_iov = iovecs;
444 2x msg.msg_iovlen = static_cast<std::size_t>(iovec_count);
445
446 #ifdef MSG_NOSIGNAL
447 2x int send_flags = msg_flags | MSG_NOSIGNAL;
448 #else
449 int send_flags = msg_flags;
450 #endif
451
452 ssize_t n;
453 2x do
454 {
455
2/8
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
2x n = ::sendmsg(this->fd, &msg, send_flags);
456 4x }
457
4/16
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ 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.
2x while (n < 0 && errno == EINTR);
458
459
2/8
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
2x if (n >= 0)
460 this->complete(0, static_cast<std::size_t>(n));
461 else
462
2/8
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
2x this->complete(errno, 0);
463 2x }
464 };
465
466 /** Shared connected recv operation for datagram sockets.
467
468 Uses recvmsg() with msg_name=nullptr (connected mode).
469 Unlike reactor_read_op, does not map n==0 to EOF
470 (zero-length datagrams are valid).
471
472 @tparam Base The backend's base op type.
473 */
474 template<class Base>
475 559x struct reactor_recv_op : Base
476 {
477 /// Maximum scatter-gather buffer count.
478 static constexpr std::size_t max_buffers = 16;
479
480 /// Scatter-gather I/O vectors.
481 iovec iovecs[max_buffers];
482
483 /// Number of active I/O vectors.
484 559x int iovec_count = 0;
485
486 /// User-supplied message flags.
487 559x int msg_flags = 0;
488
489 /// Return true (this is a read-direction operation).
490 // LCOV_EXCL_START: devirtualized and inlined at the templated
491 // completion call site; the out-of-line body is never entered.
492 bool is_read_operation() const noexcept override
493 {
494 return true;
495 }
496 // LCOV_EXCL_STOP
497
498 66x void reset() noexcept
499 {
500 66x Base::reset();
501 66x iovec_count = 0;
502 66x msg_flags = 0;
503 66x }
504
505 10x void perform_io() noexcept override
506 {
507 10x msghdr msg{};
508 10x msg.msg_iov = iovecs;
509 10x msg.msg_iovlen = static_cast<std::size_t>(iovec_count);
510
511 ssize_t n;
512 10x do
513 {
514
3/8
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
10x n = ::recvmsg(this->fd, &msg, msg_flags);
515 20x }
516
7/16
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 time.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✓ Branch 9 taken 3 times.
✓ 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.
10x while (n < 0 && errno == EINTR);
517
518
5/8
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 time.
✓ Branch 4 taken 1 time.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
10x if (n >= 0)
519 8x this->complete(0, static_cast<std::size_t>(n));
520 else
521
2/8
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
2x this->complete(errno, 0);
522 10x }
523 };
524
525 /** Shared send_to operation for datagram sockets.
526
527 Uses sendmsg() with the destination endpoint in msg_name.
528
529 @tparam Base The backend's base op type.
530 */
531 template<class Base>
532 559x struct reactor_send_to_op : Base
533 {
534 /// Maximum scatter-gather buffer count.
535 static constexpr std::size_t max_buffers = 16;
536
537 /// Scatter-gather I/O vectors.
538 iovec iovecs[max_buffers];
539
540 /// Number of active I/O vectors.
541 559x int iovec_count = 0;
542
543 /// Destination address storage.
544 559x sockaddr_storage dest_storage{};
545
546 /// Destination address length.
547 559x socklen_t dest_len = 0;
548
549 /// User-supplied message flags.
550 559x int msg_flags = 0;
551
552 103x void reset() noexcept
553 {
554 103x Base::reset();
555 103x iovec_count = 0;
556 103x dest_storage = {};
557 103x dest_len = 0;
558 103x msg_flags = 0;
559 103x }
560
561 2x void perform_io() noexcept override
562 {
563 2x msghdr msg{};
564 2x msg.msg_name = &dest_storage;
565 2x msg.msg_namelen = dest_len;
566 2x msg.msg_iov = iovecs;
567 2x msg.msg_iovlen = static_cast<std::size_t>(iovec_count);
568
569 #ifdef MSG_NOSIGNAL
570 2x int send_flags = msg_flags | MSG_NOSIGNAL;
571 #else
572 int send_flags = msg_flags;
573 #endif
574
575 ssize_t n;
576 2x do
577 {
578
2/8
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
2x n = ::sendmsg(this->fd, &msg, send_flags);
579 4x }
580
4/16
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ 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.
2x while (n < 0 && errno == EINTR);
581
582
2/8
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
2x if (n >= 0)
583 this->complete(0, static_cast<std::size_t>(n));
584 else
585
2/8
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
2x this->complete(errno, 0);
586 2x }
587 };
588
589 /** Shared recv_from operation for datagram sockets.
590
591 Uses recvmsg() with msg_name to capture the source endpoint.
592
593 @tparam Base The backend's base op type.
594 @tparam Endpoint The endpoint type (endpoint or local_endpoint).
595 */
596 template<class Base, class Endpoint = endpoint>
597 559x struct reactor_recv_from_op : Base
598 {
599 /// Maximum scatter-gather buffer count.
600 static constexpr std::size_t max_buffers = 16;
601
602 /// Scatter-gather I/O vectors.
603 iovec iovecs[max_buffers];
604
605 /// Number of active I/O vectors.
606 559x int iovec_count = 0;
607
608 /// Source address storage filled by recvmsg.
609 559x sockaddr_storage source_storage{};
610
611 /// Actual source address length returned by recvmsg.
612 559x socklen_t source_addrlen = 0;
613
614 /// Output pointer for the source endpoint (set by do_recv_from).
615 559x Endpoint* source_out = nullptr;
616
617 /// User-supplied message flags.
618 559x int msg_flags = 0;
619
620 /// Return true (this is a read-direction operation).
621 // LCOV_EXCL_START: devirtualized and inlined at the templated
622 // completion call site; the out-of-line body is never entered.
623 bool is_read_operation() const noexcept override
624 {
625 return true;
626 }
627 // LCOV_EXCL_STOP
628
629 121x void reset() noexcept
630 {
631 121x Base::reset();
632 121x iovec_count = 0;
633 121x source_storage = {};
634 121x source_addrlen = 0;
635 121x source_out = nullptr;
636 121x msg_flags = 0;
637 121x }
638
639 28x void perform_io() noexcept override
640 {
641 28x msghdr msg{};
642 28x msg.msg_name = &source_storage;
643 28x msg.msg_namelen = sizeof(source_storage);
644 28x msg.msg_iov = iovecs;
645 28x msg.msg_iovlen = static_cast<std::size_t>(iovec_count);
646
647 ssize_t n;
648 28x do
649 {
650
4/8
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 7 not taken.
28x n = ::recvmsg(this->fd, &msg, msg_flags);
651 56x }
652
8/16
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 9 times.
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✓ Branch 9 taken 14 times.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
28x while (n < 0 && errno == EINTR);
653
654
6/8
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 1 time.
✓ Branch 5 taken 14 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 time.
28x if (n >= 0)
655 {
656 26x source_addrlen = msg.msg_namelen;
657 26x this->complete(0, static_cast<std::size_t>(n));
658 26x }
659 else
660
2/8
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
2x this->complete(errno, 0);
661 28x }
662 };
663
664 } // namespace boost::corosio::detail
665
666 #endif // BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_OP_HPP
667