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)
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 |