libfly  6.2.2
C++20 utility library for Linux, macOS, and Windows
listen_socket.hpp
1 #pragma once
2 
3 #include "fly/net/socket/concepts.hpp"
4 #include "fly/net/socket/detail/base_socket.hpp"
5 
6 #include <functional>
7 #include <memory>
8 #include <optional>
9 
10 namespace fly::net {
11 
12 class NetworkConfig;
13 class SocketService;
14 
15 template <IPEndpoint EndpointType>
16 class TcpSocket;
17 
25 template <IPEndpoint EndpointType>
26 class ListenSocket :
27  public detail::BaseSocket<EndpointType>,
28  public std::enable_shared_from_this<ListenSocket<EndpointType>>
29 {
31 
32  using AcceptCompletion = std::function<void(std::shared_ptr<TcpSocket<EndpointType>>)>;
33 
34 public:
40  explicit ListenSocket(std::shared_ptr<NetworkConfig> config) noexcept;
41 
48  ListenSocket(std::shared_ptr<NetworkConfig> config, IOMode mode) noexcept;
49 
55  ListenSocket(ListenSocket &&socket) noexcept;
56 
64  ListenSocket &operator=(ListenSocket &&socket) noexcept;
65 
71  bool listen();
72 
76  bool is_listening() const;
77 
84  std::optional<TcpSocket<EndpointType>> accept();
85 
98  bool accept_async(AcceptCompletion &&callback);
99 
100  using BaseSocket::close;
101  using BaseSocket::handle;
102  using BaseSocket::io_mode;
103 
104 private:
105  friend SocketService;
106 
115  static std::shared_ptr<ListenSocket> create_socket(
116  const std::shared_ptr<SocketService> &service,
117  std::shared_ptr<NetworkConfig> config);
118 
126  ListenSocket(
127  const std::shared_ptr<SocketService> &service,
128  std::shared_ptr<NetworkConfig> config) noexcept;
129 
139  void ready_to_accept(AcceptCompletion &&callback);
140 
143 
144  bool m_is_listening {false};
145 };
146 
147 } // namespace fly::net
Definition: listen_socket.hpp:29
ListenSocket(std::shared_ptr< NetworkConfig > config) noexcept
Definition: listen_socket.cpp:15
bool is_listening() const
Definition: listen_socket.cpp:88
std::optional< TcpSocket< EndpointType > > accept()
Definition: listen_socket.cpp:95
bool listen()
Definition: listen_socket.cpp:80
ListenSocket & operator=(ListenSocket &&socket) noexcept
Definition: listen_socket.cpp:70
bool accept_async(AcceptCompletion &&callback)
Definition: listen_socket.cpp:114
Definition: socket_service.hpp:26
Definition: tcp_socket.hpp:31
Definition: base_socket.hpp:29
fly::net::IOMode io_mode() const
Definition: base_socket.cpp:132
std::shared_ptr< fly::net::NetworkConfig > network_config() const
Definition: base_socket.cpp:189
socket_type handle() const
Definition: base_socket.cpp:102
void close()
Definition: base_socket.cpp:146
std::shared_ptr< fly::net::SocketService > socket_service() const
Definition: base_socket.cpp:182