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

100.0% Lines (45 / 45) 26.0% Branches (25 / 96) 100.0% Functions (80 / 80)
reactor_basic_socket.hpp
f(x) Functions (80)
Function Calls Lines Branches Blocks
boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::local_datagram_socket::implementation, boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::reactor_basic_socket(boost::corosio::detail::kqueue_local_datagram_service&) :84 125x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::local_stream_socket::implementation, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::reactor_basic_socket(boost::corosio::detail::kqueue_local_stream_service&) :84 169x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::reactor_basic_socket(boost::corosio::detail::kqueue_tcp_service&) :84 4521x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::reactor_basic_socket(boost::corosio::detail::kqueue_udp_service&) :84 167x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_local_datagram_socket, boost::corosio::local_datagram_socket::implementation, boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::reactor_basic_socket(boost::corosio::detail::select_local_datagram_service&) :84 121x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_local_stream_socket, boost::corosio::local_stream_socket::implementation, boost::corosio::detail::select_local_stream_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::reactor_basic_socket(boost::corosio::detail::select_local_stream_service&) :84 163x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::reactor_basic_socket(boost::corosio::detail::select_tcp_service&) :84 1987x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::reactor_basic_socket(boost::corosio::detail::select_udp_service&) :84 163x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::local_datagram_socket::implementation, boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::~reactor_basic_socket() :98 125x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::local_stream_socket::implementation, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::~reactor_basic_socket() :98 169x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::~reactor_basic_socket() :98 4520x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::~reactor_basic_socket() :98 167x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_local_datagram_socket, boost::corosio::local_datagram_socket::implementation, boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::~reactor_basic_socket() :98 121x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_local_stream_socket, boost::corosio::local_stream_socket::implementation, boost::corosio::detail::select_local_stream_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::~reactor_basic_socket() :98 163x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::~reactor_basic_socket() :98 1987x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::~reactor_basic_socket() :98 163x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::local_datagram_socket::implementation, boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::init_and_register(int, int) :112 107x 100.0% – 75.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::local_stream_socket::implementation, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::init_and_register(int, int) :112 108x 100.0% – 75.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::init_and_register(int, int) :112 14933x 66.7% 50.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::init_and_register(int, int) :112 157x 100.0% – 75.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_local_datagram_socket, boost::corosio::local_datagram_socket::implementation, boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::init_and_register(int, int) :112 103x 66.7% 18.8% 75.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_local_stream_socket, boost::corosio::local_stream_socket::implementation, boost::corosio::detail::select_local_stream_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::init_and_register(int, int) :112 103x 66.7% 50.0% 75.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::init_and_register(int, int) :112 4759x 100.0% 75.0% 75.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::init_and_register(int, int) :112 152x 100.0% 75.0% 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::local_datagram_socket::implementation, boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::do_cancel() :126 2x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::local_stream_socket::implementation, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::do_cancel() :126 4x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::do_cancel() :126 159x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::do_cancel() :126 7x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_local_datagram_socket, boost::corosio::local_datagram_socket::implementation, boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::do_cancel() :126 2x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_local_stream_socket, boost::corosio::local_stream_socket::implementation, boost::corosio::detail::select_local_stream_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::do_cancel() :126 4x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::do_cancel() :126 43x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::do_cancel() :126 11x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::local_datagram_socket::implementation, boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::do_close_socket() :137 475x 100.0% – 80.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::local_stream_socket::implementation, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::do_close_socket() :137 574x 100.0% – 80.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::do_close_socket() :137 92337x 100.0% 75.0% 80.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::do_close_socket() :137 719x 100.0% – 80.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_local_datagram_socket, boost::corosio::local_datagram_socket::implementation, boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::do_close_socket() :137 454x 100.0% 28.1% 80.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_local_stream_socket, boost::corosio::local_stream_socket::implementation, boost::corosio::detail::select_local_stream_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::do_close_socket() :137 551x 100.0% 75.0% 80.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::do_close_socket() :137 34409x 100.0% 75.0% 80.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::do_close_socket() :137 696x 100.0% 75.0% 80.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::local_datagram_socket::implementation, boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::do_release_socket() :154 2x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::local_stream_socket::implementation, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::do_release_socket() :154 3x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::do_release_socket() :154 3x 0.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::do_release_socket() :154 2x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_local_datagram_socket, boost::corosio::local_datagram_socket::implementation, boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::do_release_socket() :154 2x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_local_stream_socket, boost::corosio::local_stream_socket::implementation, boost::corosio::detail::select_local_stream_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::do_release_socket() :154 3x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::do_release_socket() :154 3x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::do_release_socket() :154 2x 0.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::local_datagram_socket::implementation, boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::reuse() :178 34x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::local_stream_socket::implementation, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::reuse() :178 40x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::reuse() :178 24105x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::reuse() :178 35x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_local_datagram_socket, boost::corosio::local_datagram_socket::implementation, boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::reuse() :178 34x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_local_stream_socket, boost::corosio::local_stream_socket::implementation, boost::corosio::detail::select_local_stream_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::reuse() :178 40x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::reuse() :178 9340x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::reuse() :178 34x 100.0% – 100.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::local_datagram_socket::implementation, boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::poison() :199 159x 100.0% – 80.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::local_stream_socket::implementation, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::poison() :199 209x 100.0% – 80.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::poison() :199 28631x 100.0% – 80.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::poison() :199 202x 100.0% – 80.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_local_datagram_socket, boost::corosio::local_datagram_socket::implementation, boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::poison() :199 155x 100.0% – 80.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_local_stream_socket, boost::corosio::local_stream_socket::implementation, boost::corosio::detail::select_local_stream_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::poison() :199 203x 100.0% – 80.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::poison() :199 11327x 100.0% – 80.0% boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::poison() :199 197x 100.0% – 80.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::local_datagram_socket::implementation, boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::poison()::'lambda'(auto&)::operator()<boost::corosio::local_endpoint>(auto&) const :201 159x 100.0% – 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_local_datagram_socket, boost::corosio::local_datagram_socket::implementation, boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::poison()::'lambda'(auto&)::operator()<int>(auto&) const :201 318x 100.0% – 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::local_stream_socket::implementation, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::poison()::'lambda'(auto&)::operator()<boost::corosio::local_endpoint>(auto&) const :201 209x 100.0% – 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_local_stream_socket, boost::corosio::local_stream_socket::implementation, boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::poison()::'lambda'(auto&)::operator()<int>(auto&) const :201 418x 100.0% – 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::poison()::'lambda'(auto&)::operator()<boost::corosio::endpoint>(auto&) const :201 28630x 100.0% 50.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::poison()::'lambda'(auto&)::operator()<int>(auto&) const :201 57260x 100.0% – 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::poison()::'lambda'(auto&)::operator()<boost::corosio::endpoint>(auto&) const :201 202x 100.0% – 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::kqueue_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::poison()::'lambda'(auto&)::operator()<int>(auto&) const :201 404x 100.0% – 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_local_datagram_socket, boost::corosio::local_datagram_socket::implementation, boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::poison()::'lambda'(auto&)::operator()<boost::corosio::local_endpoint>(auto&) const :201 155x 100.0% 18.8% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_local_datagram_socket, boost::corosio::local_datagram_socket::implementation, boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::poison()::'lambda'(auto&)::operator()<int>(auto&) const :201 310x 100.0% – 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_local_stream_socket, boost::corosio::local_stream_socket::implementation, boost::corosio::detail::select_local_stream_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::poison()::'lambda'(auto&)::operator()<boost::corosio::local_endpoint>(auto&) const :201 203x 100.0% 50.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_local_stream_socket, boost::corosio::local_stream_socket::implementation, boost::corosio::detail::select_local_stream_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::local_endpoint>::poison()::'lambda'(auto&)::operator()<int>(auto&) const :201 406x 100.0% – 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::poison()::'lambda'(auto&)::operator()<boost::corosio::endpoint>(auto&) const :201 11327x 100.0% 66.7% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_tcp_socket, boost::corosio::tcp_socket::implementation, boost::corosio::detail::select_tcp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::poison()::'lambda'(auto&)::operator()<int>(auto&) const :201 22654x 100.0% – 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::poison()::'lambda'(auto&)::operator()<boost::corosio::endpoint>(auto&) const :201 197x 100.0% 50.0% 100.0% auto boost::corosio::detail::reactor_basic_socket<boost::corosio::detail::select_udp_socket, boost::corosio::udp_socket::implementation, boost::corosio::detail::select_udp_service, boost::corosio::detail::reactor_descriptor_state, boost::corosio::endpoint>::poison()::'lambda'(auto&)::operator()<int>(auto&) const :201 394x 100.0% – 100.0%
Line Branch TLA Hits Source Code
1 //
2 // Copyright (c) 2026 Steve Gerbino
3 // Copyright (c) 2026 Michael Vandeberg
4 //
5 // Distributed under the Boost Software License, Version 1.0. (See accompanying
6 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 //
8 // Official repository: https://github.com/cppalliance/corosio
9 //
10
11 #ifndef BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_BASIC_SOCKET_HPP
12 #define BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_BASIC_SOCKET_HPP
13
14 #include <boost/corosio/detail/config.hpp>
15 #include <boost/corosio/detail/intrusive.hpp>
16 #include <boost/corosio/detail/native_handle.hpp>
17 #include <boost/corosio/endpoint.hpp>
18 #include <boost/corosio/native/detail/native_socket_base.hpp>
19 #include <boost/corosio/native/detail/reactor/reactor_io_core.hpp>
20 #include <boost/corosio/native/detail/make_err.hpp>
21 #include <boost/corosio/native/detail/endpoint_convert.hpp>
22
23 #include <cstring>
24 #include <memory>
25 #include <mutex>
26 #include <utility>
27
28 #include <errno.h>
29 #include <netinet/in.h>
30 #include <sys/socket.h>
31 #include <unistd.h>
32
33 namespace boost::corosio::detail {
34
35 /** CRTP base for reactor-backed socket implementations.
36
37 Extracts the shared data members and virtual overrides that are
38 identical across TCP (reactor_stream_socket) and UDP
39 (reactor_datagram_socket). The register/park/cancel/teardown
40 protocol lives in reactor_io_core.
41
42 Derived classes provide CRTP callbacks that enumerate their
43 specific op slots so cancel/close can iterate them generically.
44
45 @tparam Derived The concrete socket type (CRTP).
46 @tparam ImplBase The public vtable base (tcp_socket::implementation
47 or udp_socket::implementation).
48 @tparam Service The backend's service type.
49 @tparam DescState The backend's descriptor_state type.
50 @tparam Endpoint The endpoint type (endpoint or local_endpoint).
51 */
52 template<
53 class Derived,
54 class ImplBase,
55 class Service,
56 class DescState,
57 class Endpoint = endpoint>
58 class reactor_basic_socket
59 : public native_socket_base<Derived, ImplBase, Endpoint>
60 , public reactor_io_core<Derived, Service, DescState>
61 , public intrusive_list<Derived>::node
62 {
63 friend Derived;
64
65 template<class, class, class, class, class, class, class, class, class>
66 friend class reactor_stream_socket;
67
68 template<
69 class,
70 class,
71 class,
72 class,
73 class,
74 class,
75 class,
76 class,
77 class,
78 class,
79 class>
80 friend class reactor_datagram_socket;
81
82 using core_type = reactor_io_core<Derived, Service, DescState>;
83
84 7416x explicit reactor_basic_socket(Service& svc) noexcept : core_type(svc) {}
85
86 protected:
87 // fd_ / local_endpoint_ and the synchronous accessors (native_handle,
88 // is_open, set_option/get_option, set_socket/set_local_endpoint, do_bind)
89 // live in native_socket_base — the readiness/completion-agnostic base
90 // shared with io_uring's sockets. The using-declarations make the
91 // inherited members visible to this template's own unqualified
92 // references below (two-phase lookup).
93 using native_socket_base<Derived, ImplBase, Endpoint>::fd_;
94 using native_socket_base<Derived, ImplBase, Endpoint>::local_endpoint_;
95 using native_socket_base<Derived, ImplBase, Endpoint>::family_;
96
97 public:
98 7415x ~reactor_basic_socket() override = default;
99
100 /** Assign the fd, initialize descriptor state, and register with
101 the reactor.
102
103 @param fd The descriptor to adopt.
104 @param family The descriptor's address family, or `AF_UNSPEC`
105 to look it up when first needed.
106
107 @return The error if the reactor rejects the descriptor, in
108 which case the implementation is left closed and the caller
109 retains ownership of @a fd; otherwise a default constructed
110 error code.
111 */
112 20422x std::error_code init_and_register(int fd, int family = AF_UNSPEC) noexcept
113 {
114 20422x fd_ = fd;
115 20422x family_ = family;
116
5/16
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 15161 times.
✓ Branch 2 taken 1 time.
✓ Branch 3 taken 5116 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 142 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
20422x if (auto ec = this->register_fd(fd))
117 {
118 3x fd_ = -1;
119 3x family_ = AF_UNSPEC;
120 3x return ec;
121 }
122 20419x return {};
123 20422x }
124
125 /// Cancel all pending operations.
126 232x void do_cancel() noexcept
127 {
128 232x this->cancel_all();
129 232x }
130
131 /** Close the socket and cancel pending operations.
132
133 Invoked by the derived class's close_socket(). The
134 derived class may add backend-specific cleanup after
135 calling this method.
136 */
137 130215x void do_close_socket() noexcept
138 {
139 130215x this->abandon_all();
140
6/16
✓ Branch 0 taken 71054 times.
✓ Branch 1 taken 22392 times.
✓ Branch 2 taken 26652 times.
✓ Branch 3 taken 9460 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 517 times.
✓ Branch 11 taken 140 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
130215x if (fd_ >= 0)
141 {
142
3/16
✓ Branch 0 taken 22392 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9460 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 140 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
31992x ::close(fd_);
143 31992x fd_ = -1;
144 31992x }
145 130215x family_ = AF_UNSPEC;
146 130215x local_endpoint_ = Endpoint{};
147 130215x }
148
149 /** Release the socket without closing the fd.
150
151 Like do_close_socket() but does not call ::close().
152 Returns the fd so the caller can take ownership.
153 */
154 20x native_handle_type do_release_socket() noexcept
155 {
156 20x this->abandon_all();
157 20x native_handle_type released = fd_;
158 20x fd_ = -1;
159 20x family_ = AF_UNSPEC;
160 20x local_endpoint_ = Endpoint{};
161 20x return released;
162 }
163
164 /** Reset descriptor state for recycling.
165
166 Called by the owning service's `construct()` when popping this
167 impl back off the free list. Actively re-initializes every
168 field it owns rather than trusting `close_socket()`'s prior
169 writes to still be there — `poison()` below depends on that,
170 and a future field added to either side without the other
171 would otherwise go unnoticed until this one re-sets it.
172 `object_ref_` and `is_enqueued_` are asserted instead: `poison()`
173 never touches them, so they must already hold their
174 zero-action-complete state.
175
176 @pre refs_ == 0, fd closed and deregistered, no op in flight.
177 */
178 33662x void reuse() noexcept
179 {
180 33662x fd_ = -1;
181 33662x family_ = AF_UNSPEC;
182 33662x local_endpoint_ = Endpoint{};
183 33662x this->reset_desc_state();
184 33662x }
185
186 #if !defined(NDEBUG)
187 /** Poison the fields `reuse()` re-initializes, before the pool
188 parks this impl on the free list.
189
190 A field `reuse()` forgets to reset then reads back as this
191 unmistakable byte pattern instead of silently matching
192 whatever `close_socket()` happened to leave, turning a missed
193 reset into an immediate, loud failure rather than a latent
194 stale-state bug. See `reactor_io_core::poison_desc_state()`
195 for what is left alone.
196
197 @pre refs_ == 0, fd closed and deregistered, no op in flight.
198 */
199 41083x void poison() noexcept
200 {
201 164329x auto smash = [](auto& field) {
202 123246x std::memset(static_cast<void*>(&field), 0xDB, sizeof(field));
203 123246x };
204
4/16
✓ Branch 0 taken 29013 times.
✓ Branch 1 taken 1 time.
✓ Branch 2 taken 11882 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 187 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
41084x smash(fd_);
205
3/16
✓ Branch 0 taken 29013 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 11882 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 187 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
41082x smash(family_);
206
4/16
✓ Branch 0 taken 29012 times.
✓ Branch 1 taken 1 time.
✓ Branch 2 taken 11882 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 187 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
41082x smash(local_endpoint_);
207 41081x this->poison_desc_state();
208 41081x }
209 #endif
210 };
211
212 } // namespace boost::corosio::detail
213
214 #endif // BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_BASIC_SOCKET_HPP
215