13 #include <fmt/format.h> 14 #include <fmt/ostream.h> 16 #include <restinio/impl/connection.hpp> 37 template <
typename Socket >
41 template <
typename Settings >
46 asio_ns::io_context & io_context )
84 return m_sockets.size();
107 template<
typename Ip_Blocker >
112 template<
typename Settings >
114 const Settings & settings )
118 template<
typename Socket >
143 template<
typename Socket >
158 template <
typename Traits >
165 typename Traits::ip_blocker_t >;
171 using logger_t =
typename Traits::logger_t;
172 using strand_t =
typename Traits::strand_t;
173 using stream_socket_t =
typename Traits::stream_socket_t;
176 template <
typename Settings >
180 asio_ns::io_context & io_context,
182 connection_factory_shared_ptr_t connection_factory,
207 return fmt::
format(
"server already started on {}",
ep );
217 if(
addr ==
"localhost" )
219 else if(
addr ==
"ip6-localhost" )
260 return fmt::
format(
"failed to start server on {}: {}",
280 return fmt::
format(
"server already closed" );
317 const std::error_code & ec )
326 "accept connection from {} on socket #{}",
342 "accepted connection from {} on socket #{} denied by" 362 "failed to accept connection on socket #{}: {}",
374 stream_socket_t incoming_socket,
375 endpoint_t remote_endpoint )
connection_factory_shared_ptr_t m_connection_factory
Factory for creating connections.
void open()
Start listen on port specified in ctor.
A class for holding actual IP-blocker.
restinio::ip_blocker::inspection_result_t inspect_incoming(Socket &socket) const noexcept
ip_blocker_holder_t(const Settings &settings)
Socket move_socket(std::size_t idx)
Extract the socket via move.
void close_impl()
Close opened acceptor.
const asio_ns::ip::tcp m_protocol
std::unique_ptr< acceptor_options_setter_t > m_acceptor_options_setter
Server port listener and connection receiver routine.
auto cuncurrent_accept_sockets_count() const noexcept
The number of sockets that can be used for cuncurrent accept operations.
const bool m_separate_accept_and_create_connect
Do separate an accept operation and connection instantiation.
void accept_next(std::size_t i)
Set a callback for a new connection.
Socket & socket(std::size_t idx)
Get the reference to socket.
socket_supplier_t(Settings &settings, asio_ns::io_context &io_context)
std::vector< Socket > m_sockets
A temporary socket for receiving new connections.
const std::uint16_t m_port
Server endpoint.
void accept_current_connection(std::size_t i, const std::error_code &ec)
Accept current connection.
restinio::ip_blocker::inspection_result_t inspect_incoming(Socket &socket) const noexcept
const std::string m_address
acceptor_t(Settings &settings, asio_ns::io_context &io_context, connection_factory_shared_ptr_t connection_factory, logger_t &logger)
void do_accept_current_connection(stream_socket_t incoming_socket, endpoint_t remote_endpoint)
asio_ns::io_context & m_io_context
io_context for sockets to run on.
asio_ns::executor m_executor
Asio executor.
std::shared_ptr< Ip_Blocker > m_ip_blocker
void close()
Close listener if any.
auto & get_open_close_operations_executor() noexcept
Get an executor for close operation.
strand_t m_open_close_operations_executor
auto & get_executor() noexcept
Get executor for acceptor.
asio_ns::ip::tcp::acceptor m_acceptor
Context for accepting http connections.
std::enable_if< std::is_same< Parameter_Container, query_string_params_t >::value||std::is_same< Parameter_Container, router::route_params_t >::value, optional_t< Value_Type > >::type opt_value(const Parameter_Container ¶ms, string_view_t key)
Gets the value of a parameter specified by key wrapped in optional_t<Value_Type> if parameter exists ...