13 #include <restinio/connection_count_limiter.hpp> 15 #include <restinio/impl/include_fmtlib.hpp> 17 #include <restinio/impl/connection.hpp> 19 #include <restinio/utils/suppress_exceptions.hpp> 40 template <
typename Socket >
44 template <
typename Settings >
49 asio_ns::io_context & io_context )
87 return m_sockets.size();
110 template<
typename Ip_Blocker >
115 template<
typename Settings >
117 const Settings & settings )
121 template<
typename Socket >
146 template<
typename Socket >
161 template <
typename Traits >
169 typename Traits::ip_blocker_t >;
180 using logger_t =
typename Traits::logger_t;
181 using strand_t =
typename Traits::strand_t;
182 using stream_socket_t =
typename Traits::stream_socket_t;
185 template <
typename Settings >
189 asio_ns::io_context & io_context,
191 connection_factory_shared_ptr_t connection_factory,
226 return fmt::
format(
"server already started on {}",
ep );
285 return fmt::
format(
"failed to start server on {}: {}",
305 return fmt::
format(
"server already closed" );
333 (
const auto &
ec )
noexcept 395 const std::error_code & ec )
noexcept 401 "accept_current_connection",
412 "failed to accept connection on socket #{}: {}",
442 "accept connection from {} on socket #{}",
457 "accepted connection from {} on socket #{} denied by" 475 stream_socket_t incoming_socket,
476 endpoint_t remote_endpoint )
491 "do_accept_current_connection.create_and_init_connection",
597 else if(
str_addr ==
"ip6-localhost" )
void accept_current_connection(std::size_t i, const std::error_code &ec) noexcept
Accept current connection.
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
static RESTINIO_NODISCARD optional_t< asio_ns::ip::address > try_extract_actual_address_from_variant(const restinio::details::address_variant_t &from)
Helper for extraction of an actual IP-address from an instance of address_variant.
std::unique_ptr< acceptor_options_setter_t > m_acceptor_options_setter
Server port listener and connection receiver routine.
restinio::ip_blocker::inspection_result_t inspect_incoming(Socket &) const noexcept
const bool m_separate_accept_and_create_connect
Do separate an accept operation and connection instantiation.
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.
void accept_connection_for_socket_with_index(std::size_t i)
Performs actual actions for accepting a new connection.
const std::uint16_t m_port
Server endpoint.
acceptor_t(Settings &settings, asio_ns::io_context &io_context, connection_factory_shared_ptr_t connection_factory, logger_t &logger)
::restinio::connection_count_limits::impl::acceptor_callback_iface_t * self_as_acceptor_callback() noexcept
Helper for suppressing warnings of using this in initilizer list.
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.
acceptor_post_bind_hook_t m_acceptor_post_bind_hook
A hook to be called just after a successful call to bind for acceptor.
std::shared_ptr< Ip_Blocker > m_ip_blocker
void close()
Close listener if any.
RESTINIO_NODISCARD char to_lower_case(unsigned char ch)
auto & get_open_close_operations_executor() noexcept
Get an executor for close operation.
void accept_next(std::size_t i) noexcept
Set a callback for a new connection.
strand_t m_open_close_operations_executor
auto & get_executor() noexcept
Get executor for acceptor.
auto concurrent_accept_sockets_count() const noexcept
The number of sockets that can be used for cuncurrent accept operations.
const restinio::details::address_variant_t m_address
asio_ns::ip::tcp::acceptor m_acceptor
default_asio_executor m_executor
Asio executor.
void schedule_next_accept_attempt(std::size_t index) noexcept
void call_accept_now(std::size_t index) noexcept
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 ...
connection_count_limiter_t m_connection_count_limiter
Actual limiter of active parallel connections.