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

100.0% Lines (9/9) 100.0% Functions (4/4)
include/boost/corosio/native/detail/epoll/epoll_acceptor.hpp
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_EPOLL_EPOLL_ACCEPTOR_HPP
11 #define BOOST_COROSIO_NATIVE_DETAIL_EPOLL_EPOLL_ACCEPTOR_HPP
12
13 #include <boost/corosio/detail/platform.hpp>
14
15 #if BOOST_COROSIO_HAS_EPOLL
16
17 #include <boost/corosio/tcp_acceptor.hpp>
18 #include <boost/capy/ex/executor_ref.hpp>
19 #include <boost/corosio/detail/intrusive.hpp>
20
21 #include <boost/corosio/native/detail/epoll/epoll_op.hpp>
22
23 #include <memory>
24
25 namespace boost::corosio::detail {
26
27 class epoll_acceptor_service;
28
29 /// Acceptor implementation for epoll backend.
30 class epoll_acceptor final
31 : public tcp_acceptor::implementation
32 , public std::enable_shared_from_this<epoll_acceptor>
33 , public intrusive_list<epoll_acceptor>::node
34 {
35 friend class epoll_acceptor_service;
36
37 public:
38 explicit epoll_acceptor(epoll_acceptor_service& svc) noexcept;
39
40 std::coroutine_handle<> accept(
41 std::coroutine_handle<>,
42 capy::executor_ref,
43 std::stop_token,
44 std::error_code*,
45 io_object::implementation**) override;
46
47 int native_handle() const noexcept
48 {
49 return fd_;
50 }
51 4799 endpoint local_endpoint() const noexcept override
52 {
53 4799 return local_endpoint_;
54 }
55 5298 bool is_open() const noexcept override
56 {
57 5298 return fd_ >= 0;
58 }
59 void cancel() noexcept override;
60
61 std::error_code set_option(
62 int level,
63 int optname,
64 void const* data,
65 std::size_t size) noexcept override;
66 std::error_code
67 get_option(int level, int optname, void* data, std::size_t* size)
68 const noexcept override;
69 void cancel_single_op(epoll_op& op) noexcept;
70 void close_socket() noexcept;
71 77 void set_local_endpoint(endpoint ep) noexcept
72 {
73 77 local_endpoint_ = ep;
74 77 }
75
76 9475 epoll_acceptor_service& service() noexcept
77 {
78 9475 return svc_;
79 }
80
81 epoll_accept_op acc_;
82 descriptor_state desc_state_;
83
84 private:
85 epoll_acceptor_service& svc_;
86 int fd_ = -1;
87 endpoint local_endpoint_;
88 };
89
90 } // namespace boost::corosio::detail
91
92 #endif // BOOST_COROSIO_HAS_EPOLL
93
94 #endif // BOOST_COROSIO_NATIVE_DETAIL_EPOLL_EPOLL_ACCEPTOR_HPP
95