include/boost/corosio/native/detail/kqueue/kqueue_udp_socket.hpp

-% Lines (0/0) -% List of functions (0/0) -% Branches (0/0)
Line 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_KQUEUE_KQUEUE_UDP_SOCKET_HPP
11 #define BOOST_COROSIO_NATIVE_DETAIL_KQUEUE_KQUEUE_UDP_SOCKET_HPP
12
13 #include <boost/corosio/detail/platform.hpp>
14
15 #if BOOST_COROSIO_HAS_KQUEUE
16
17 #include <boost/corosio/native/detail/reactor/reactor_datagram_socket.hpp>
18 #include <boost/corosio/native/detail/reactor/reactor_op.hpp>
19 #include <boost/corosio/native/detail/reactor/reactor_descriptor_state.hpp>
20 #include <boost/corosio/native/detail/kqueue/kqueue_op.hpp>
21 #include <boost/capy/ex/executor_ref.hpp>
22
23 namespace boost::corosio::detail {
24
25 class kqueue_udp_service;
26 class kqueue_udp_socket;
27
28 /// kqueue datagram base operation.
29 struct kqueue_datagram_op : reactor_op<kqueue_udp_socket, kqueue_tcp_acceptor>
30 {
31 void operator()() override;
32 };
33
34 /// kqueue send_to operation.
35 struct kqueue_send_to_op final : reactor_send_to_op<kqueue_datagram_op>
36 {
37 void cancel() noexcept override;
38 };
39
40 /// kqueue recv_from operation.
41 struct kqueue_recv_from_op final : reactor_recv_from_op<kqueue_datagram_op>
42 {
43 void operator()() override;
44 void cancel() noexcept override;
45 };
46
47 /// kqueue connect operation for UDP.
48 struct kqueue_udp_connect_op final : reactor_connect_op<kqueue_datagram_op>
49 {
50 void operator()() override;
51 void cancel() noexcept override;
52 };
53
54 /// kqueue connected send operation.
55 struct kqueue_send_op final : reactor_send_op<kqueue_datagram_op>
56 {
57 void cancel() noexcept override;
58 };
59
60 /// kqueue connected recv operation.
61 struct kqueue_recv_op final : reactor_recv_op<kqueue_datagram_op>
62 {
63 void operator()() override;
64 void cancel() noexcept override;
65 };
66
67 /// Datagram socket implementation for kqueue backend.
68 class kqueue_udp_socket final
69 : public reactor_datagram_socket<
70 kqueue_udp_socket,
71 kqueue_udp_service,
72 kqueue_udp_connect_op,
73 kqueue_send_to_op,
74 kqueue_recv_from_op,
75 kqueue_send_op,
76 kqueue_recv_op,
77 descriptor_state>
78 {
79 friend class kqueue_udp_service;
80
81 public:
82 explicit kqueue_udp_socket(kqueue_udp_service& svc) noexcept;
83 ~kqueue_udp_socket() override;
84
85 std::coroutine_handle<> send_to(
86 std::coroutine_handle<>,
87 capy::executor_ref,
88 buffer_param,
89 endpoint,
90 std::stop_token,
91 std::error_code*,
92 std::size_t*) override;
93
94 std::coroutine_handle<> recv_from(
95 std::coroutine_handle<>,
96 capy::executor_ref,
97 buffer_param,
98 endpoint*,
99 std::stop_token,
100 std::error_code*,
101 std::size_t*) override;
102
103 std::coroutine_handle<> connect(
104 std::coroutine_handle<>,
105 capy::executor_ref,
106 endpoint,
107 std::stop_token,
108 std::error_code*) override;
109
110 std::coroutine_handle<> send(
111 std::coroutine_handle<>,
112 capy::executor_ref,
113 buffer_param,
114 std::stop_token,
115 std::error_code*,
116 std::size_t*) override;
117
118 std::coroutine_handle<> recv(
119 std::coroutine_handle<>,
120 capy::executor_ref,
121 buffer_param,
122 std::stop_token,
123 std::error_code*,
124 std::size_t*) override;
125
126 endpoint remote_endpoint() const noexcept override;
127
128 void cancel() noexcept override;
129 void close_socket() noexcept;
130 };
131
132 } // namespace boost::corosio::detail
133
134 #endif // BOOST_COROSIO_HAS_KQUEUE
135
136 #endif // BOOST_COROSIO_NATIVE_DETAIL_KQUEUE_KQUEUE_UDP_SOCKET_HPP
137