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_SELECT_SELECT_ACCEPTOR_HPP
11 : #define BOOST_COROSIO_NATIVE_DETAIL_SELECT_SELECT_ACCEPTOR_HPP
12 :
13 : #include <boost/corosio/detail/platform.hpp>
14 :
15 : #if BOOST_COROSIO_HAS_SELECT
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/select/select_op.hpp>
22 :
23 : #include <memory>
24 :
25 : namespace boost::corosio::detail {
26 :
27 : class select_acceptor_service;
28 : class select_socket_service;
29 :
30 : /// Acceptor implementation for select backend.
31 : class select_acceptor final
32 : : public tcp_acceptor::implementation
33 : , public std::enable_shared_from_this<select_acceptor>
34 : , public intrusive_list<select_acceptor>::node
35 : {
36 : friend class select_acceptor_service;
37 :
38 : public:
39 : explicit select_acceptor(select_acceptor_service& svc) noexcept;
40 :
41 : std::coroutine_handle<> accept(
42 : std::coroutine_handle<>,
43 : capy::executor_ref,
44 : std::stop_token,
45 : std::error_code*,
46 : io_object::implementation**) override;
47 :
48 : int native_handle() const noexcept
49 : {
50 : return fd_;
51 : }
52 HIT 58 : endpoint local_endpoint() const noexcept override
53 : {
54 58 : return local_endpoint_;
55 : }
56 3502 : bool is_open() const noexcept override
57 : {
58 3502 : return fd_ >= 0;
59 : }
60 : void cancel() noexcept override;
61 :
62 : std::error_code set_option(
63 : int level, int optname,
64 : void const* data, std::size_t size) noexcept override;
65 : std::error_code get_option(
66 : int level, int optname,
67 : void* data, std::size_t* size) const noexcept override;
68 : void cancel_single_op(select_op& op) noexcept;
69 : void close_socket() noexcept;
70 57 : void set_local_endpoint(endpoint ep) noexcept
71 : {
72 57 : local_endpoint_ = ep;
73 57 : }
74 :
75 3071 : select_acceptor_service& service() noexcept
76 : {
77 3071 : return svc_;
78 : }
79 :
80 : select_accept_op acc_;
81 :
82 : private:
83 : select_acceptor_service& svc_;
84 : int fd_ = -1;
85 : endpoint local_endpoint_;
86 : };
87 :
88 : } // namespace boost::corosio::detail
89 :
90 : #endif // BOOST_COROSIO_HAS_SELECT
91 :
92 : #endif // BOOST_COROSIO_NATIVE_DETAIL_SELECT_SELECT_ACCEPTOR_HPP
|