include/boost/corosio/native/detail/epoll/epoll_local_datagram_socket.hpp

0.0% Lines (0/6) 0.0% List of functions (0/3)
epoll_local_datagram_socket.hpp
f(x) Functions (3)
Line TLA Hits Source Code
1 //
2 // Copyright (c) 2026 Michael Vandeberg
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_EPOLL_EPOLL_LOCAL_DATAGRAM_SOCKET_HPP
11 #define BOOST_COROSIO_NATIVE_DETAIL_EPOLL_EPOLL_LOCAL_DATAGRAM_SOCKET_HPP
12
13 #include <boost/corosio/detail/platform.hpp>
14
15 #if BOOST_COROSIO_HAS_EPOLL
16
17 #include <boost/corosio/native/detail/reactor/reactor_datagram_socket.hpp>
18 #include <boost/corosio/local_endpoint.hpp>
19 #include <boost/corosio/native/detail/reactor/reactor_op.hpp>
20 #include <boost/corosio/native/detail/epoll/epoll_op.hpp>
21 #include <boost/corosio/local_datagram_socket.hpp>
22 #include <boost/capy/ex/executor_ref.hpp>
23
24 namespace boost::corosio::detail {
25
26 // Forward declarations
27 class epoll_local_datagram_service;
28 class epoll_local_datagram_socket;
29
30 /// Base operation for local datagram sockets on epoll.
31 struct epoll_local_datagram_op
32 : reactor_op<epoll_local_datagram_socket, epoll_tcp_acceptor>
33 {
34 void operator()() override;
35 };
36
37 /// Connect operation for local datagram sockets.
38 struct epoll_local_dgram_connect_op final
39 : reactor_connect_op<epoll_local_datagram_op, corosio::local_endpoint>
40 {
41 void operator()() override;
42 void cancel() noexcept override;
43 };
44
45 /// Send-to operation for local datagram sockets.
46 struct epoll_local_send_to_op final
47 : reactor_send_to_op<epoll_local_datagram_op>
48 {
49 void cancel() noexcept override;
50 };
51
52 /// Recv-from operation for local datagram sockets.
53 struct epoll_local_recv_from_op final
54 : reactor_recv_from_op<epoll_local_datagram_op, corosio::local_endpoint>
55 {
56 void operator()() override;
57 void cancel() noexcept override;
58 };
59
60 /// Connected send operation for local datagram sockets.
61 struct epoll_local_dgram_send_op final
62 : reactor_send_op<epoll_local_datagram_op>
63 {
64 void cancel() noexcept override;
65 };
66
67 /// Connected recv operation for local datagram sockets.
68 struct epoll_local_dgram_recv_op final
69 : reactor_recv_op<epoll_local_datagram_op>
70 {
71 void operator()() override;
72 void cancel() noexcept override;
73 };
74
75 /// Datagram socket implementation for local (Unix) sockets on epoll.
76 class epoll_local_datagram_socket final
77 : public reactor_datagram_socket<
78 epoll_local_datagram_socket,
79 epoll_local_datagram_service,
80 epoll_local_dgram_connect_op,
81 epoll_local_send_to_op,
82 epoll_local_recv_from_op,
83 epoll_local_dgram_send_op,
84 epoll_local_dgram_recv_op,
85 descriptor_state,
86 local_datagram_socket::implementation,
87 corosio::local_endpoint>
88 {
89 friend class epoll_local_datagram_service;
90
91 public:
92 explicit epoll_local_datagram_socket(
93 epoll_local_datagram_service& svc) noexcept;
94 ~epoll_local_datagram_socket() override;
95
96 std::coroutine_handle<> connect(
97 std::coroutine_handle<>,
98 capy::executor_ref,
99 corosio::local_endpoint,
100 std::stop_token,
101 std::error_code*) override;
102
103 std::coroutine_handle<> send_to(
104 std::coroutine_handle<>,
105 capy::executor_ref,
106 buffer_param,
107 corosio::local_endpoint,
108 int flags,
109 std::stop_token,
110 std::error_code*,
111 std::size_t*) override;
112
113 std::coroutine_handle<> recv_from(
114 std::coroutine_handle<>,
115 capy::executor_ref,
116 buffer_param,
117 corosio::local_endpoint*,
118 int flags,
119 std::stop_token,
120 std::error_code*,
121 std::size_t*) override;
122
123 std::coroutine_handle<> send(
124 std::coroutine_handle<>,
125 capy::executor_ref,
126 buffer_param,
127 int flags,
128 std::stop_token,
129 std::error_code*,
130 std::size_t*) override;
131
132 std::coroutine_handle<> recv(
133 std::coroutine_handle<>,
134 capy::executor_ref,
135 buffer_param,
136 int flags,
137 std::stop_token,
138 std::error_code*,
139 std::size_t*) override;
140
141 std::error_code shutdown(
142 local_datagram_socket::shutdown_type what) noexcept override
143 {
144 return do_shutdown(static_cast<int>(what));
145 }
146
147 std::error_code bind(corosio::local_endpoint ep) noexcept override
148 {
149 return do_bind(ep);
150 }
151
152 corosio::local_endpoint remote_endpoint() const noexcept override
153 {
154 return reactor_datagram_socket::remote_endpoint();
155 }
156
157 void cancel() noexcept override;
158 void close_socket() noexcept;
159 native_handle_type release_socket() noexcept override;
160 };
161
162 } // namespace boost::corosio::detail
163
164 #endif // BOOST_COROSIO_HAS_EPOLL
165
166 #endif // BOOST_COROSIO_NATIVE_DETAIL_EPOLL_EPOLL_LOCAL_DATAGRAM_SOCKET_HPP
167