100.00% Lines (2/2) 100.00% Functions (2/2)
TLA Baseline Branch
Line Hits Code Line Hits Code
1   // 1   //
2   // Copyright (c) 2026 Steve Gerbino 2   // Copyright (c) 2026 Steve Gerbino
3   // 3   //
4   // Distributed under the Boost Software License, Version 1.0. (See accompanying 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) 5   // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6   // 6   //
7   // Official repository: https://github.com/cppalliance/corosio 7   // Official repository: https://github.com/cppalliance/corosio
8   // 8   //
9   9  
10   #ifndef BOOST_COROSIO_DETAIL_TCP_ACCEPTOR_SERVICE_HPP 10   #ifndef BOOST_COROSIO_DETAIL_TCP_ACCEPTOR_SERVICE_HPP
11   #define BOOST_COROSIO_DETAIL_TCP_ACCEPTOR_SERVICE_HPP 11   #define BOOST_COROSIO_DETAIL_TCP_ACCEPTOR_SERVICE_HPP
12   12  
13   #include <boost/corosio/detail/config.hpp> 13   #include <boost/corosio/detail/config.hpp>
14   #include <boost/corosio/tcp_acceptor.hpp> 14   #include <boost/corosio/tcp_acceptor.hpp>
15   #include <boost/corosio/endpoint.hpp> 15   #include <boost/corosio/endpoint.hpp>
16   #include <boost/capy/ex/execution_context.hpp> 16   #include <boost/capy/ex/execution_context.hpp>
17   #include <system_error> 17   #include <system_error>
18   18  
19   namespace boost::corosio::detail { 19   namespace boost::corosio::detail {
20   20  
21   /** Abstract acceptor service base class. 21   /** Abstract acceptor service base class.
22   22  
23   Concrete implementations ( epoll_acceptors, select_acceptors, etc. ) 23   Concrete implementations ( epoll_acceptors, select_acceptors, etc. )
24   inherit from this class and provide platform-specific acceptor 24   inherit from this class and provide platform-specific acceptor
25   operations. The context constructor installs whichever backend 25   operations. The context constructor installs whichever backend
26   via `make_service`, and `tcp_acceptor.cpp` retrieves it via 26   via `make_service`, and `tcp_acceptor.cpp` retrieves it via
27   `use_service<tcp_acceptor_service>()`. 27   `use_service<tcp_acceptor_service>()`.
28   */ 28   */
29   class BOOST_COROSIO_DECL tcp_acceptor_service 29   class BOOST_COROSIO_DECL tcp_acceptor_service
30   : public capy::execution_context::service 30   : public capy::execution_context::service
31   , public io_object::io_service 31   , public io_object::io_service
32   { 32   {
33   public: 33   public:
34   /// Identifies this service for `execution_context` lookup. 34   /// Identifies this service for `execution_context` lookup.
35   using key_type = tcp_acceptor_service; 35   using key_type = tcp_acceptor_service;
36   36  
37   /** Create the acceptor socket without binding or listening. 37   /** Create the acceptor socket without binding or listening.
38   38  
39   Creates a socket with dual-stack enabled for IPv6 but does 39   Creates a socket with dual-stack enabled for IPv6 but does
40   not bind or listen. Does not set SO_REUSEADDR. 40   not bind or listen. Does not set SO_REUSEADDR.
41   41  
42   @param impl The acceptor implementation to open. 42   @param impl The acceptor implementation to open.
43   @param family Address family (e.g. `AF_INET`, `AF_INET6`). 43   @param family Address family (e.g. `AF_INET`, `AF_INET6`).
44   @param type Socket type (e.g. `SOCK_STREAM`). 44   @param type Socket type (e.g. `SOCK_STREAM`).
45   @param protocol Protocol number (e.g. `IPPROTO_TCP`). 45   @param protocol Protocol number (e.g. `IPPROTO_TCP`).
46   @return Error code on failure, empty on success. 46   @return Error code on failure, empty on success.
47   */ 47   */
48   virtual std::error_code open_acceptor_socket( 48   virtual std::error_code open_acceptor_socket(
49   tcp_acceptor::implementation& impl, 49   tcp_acceptor::implementation& impl,
50   int family, 50   int family,
51   int type, 51   int type,
52   int protocol) = 0; 52   int protocol) = 0;
53   53  
54   /** Bind an open acceptor to a local endpoint. 54   /** Bind an open acceptor to a local endpoint.
55   55  
56   @param impl The acceptor implementation to bind. 56   @param impl The acceptor implementation to bind.
57   @param ep The local endpoint to bind to. 57   @param ep The local endpoint to bind to.
58   @return Error code on failure, empty on success. 58   @return Error code on failure, empty on success.
59   */ 59   */
60   virtual std::error_code 60   virtual std::error_code
61   bind_acceptor(tcp_acceptor::implementation& impl, endpoint ep) = 0; 61   bind_acceptor(tcp_acceptor::implementation& impl, endpoint ep) = 0;
62   62  
63   /** Start listening for incoming connections. 63   /** Start listening for incoming connections.
64   64  
65   Registers the acceptor with the platform reactor after 65   Registers the acceptor with the platform reactor after
66   calling `::listen()`. 66   calling `::listen()`.
67   67  
68   @param impl The acceptor implementation to listen on. 68   @param impl The acceptor implementation to listen on.
69   @param backlog The maximum length of the pending connection queue. 69   @param backlog The maximum length of the pending connection queue.
70   @return Error code on failure, empty on success. 70   @return Error code on failure, empty on success.
71   */ 71   */
72   virtual std::error_code 72   virtual std::error_code
73   listen_acceptor(tcp_acceptor::implementation& impl, int backlog) = 0; 73   listen_acceptor(tcp_acceptor::implementation& impl, int backlog) = 0;
74   74  
75   protected: 75   protected:
76   /// Construct the acceptor service. 76   /// Construct the acceptor service.
HITCBC 77   605 tcp_acceptor_service() = default; 77   605 tcp_acceptor_service() = default;
78   78  
79   /// Destroy the acceptor service. 79   /// Destroy the acceptor service.
HITCBC 80   605 ~tcp_acceptor_service() override = default; 80   605 ~tcp_acceptor_service() override = default;
81   }; 81   };
82   82  
83   } // namespace boost::corosio::detail 83   } // namespace boost::corosio::detail
84   84  
85   #endif // BOOST_COROSIO_DETAIL_TCP_ACCEPTOR_SERVICE_HPP 85   #endif // BOOST_COROSIO_DETAIL_TCP_ACCEPTOR_SERVICE_HPP