TLA Line data 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 HIT 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
|