userver
C++ Async Framework
Toggle main menu visibility
Loading...
Searching...
No Matches
tcp_acceptor_base.hpp
Go to the documentation of this file.
1
#
pragma
once
2
3
/// @file userver/components/tcp_acceptor_base.hpp
4
/// @brief @copybrief components::TcpAcceptorBase
5
6
#
include
<
userver
/
components
/
component_base
.
hpp
>
7
#
include
<
userver
/
concurrent
/
background_task_storage
.
hpp
>
8
#
include
<
userver
/
engine
/
io
/
socket
.
hpp
>
9
#
include
<
userver
/
engine
/
task
/
task
.
hpp
>
10
11
USERVER_NAMESPACE_BEGIN
12
13
namespace
server::net {
14
struct
ListenerConfig;
15
}
16
17
namespace
components
{
18
19
/// @ingroup userver_base_classes userver_components
20
///
21
/// @brief Component for accepting incoming TCP connections.
22
///
23
/// Each accepted socket is processed in a new coroutine by ProcessSocket of the derived class.
24
///
25
/// ## Static options of components::TcpAcceptorBase :
26
/// @include{doc} scripts/docs/en/components_schema/core/src/components/tcp_acceptor_base.md
27
///
28
/// Options inherited from @ref components::ComponentBase :
29
/// @include{doc} scripts/docs/en/components_schema/core/src/components/impl/component_base.md
30
///
31
/// @see @ref scripts/docs/en/userver/tutorial/tcp_service.md
32
class
TcpAcceptorBase
:
public
ComponentBase
{
33
public
:
34
TcpAcceptorBase(
const
ComponentConfig&,
const
ComponentContext&);
35
~TcpAcceptorBase() override;
36
37
static
yaml_config::Schema GetStaticConfigSchema();
38
39
protected
:
40
/// Override this function to process incoming sockets.
41
///
42
/// @warning The function is called concurrently from multiple threads on
43
/// each new socket.
44
virtual
void
ProcessSocket
(engine::
io
::Socket&& sock) = 0;
45
46
private
:
47
TcpAcceptorBase(
48
const
ComponentConfig& config,
49
const
ComponentContext& context,
50
const
server::net::ListenerConfig& acceptor_config
51
);
52
53
void
KeepAccepting(engine::
io
::Socket& listen_sock);
54
55
void
Start();
56
void
Stop()
noexcept
;
57
58
struct
SocketData {
59
engine::
io
::Socket listen_sock;
60
engine::
Task
acceptor;
61
};
62
63
const
bool
no_delay_;
64
engine::TaskProcessor& acceptor_task_processor_;
65
engine::TaskProcessor& sockets_task_processor_;
66
concurrent
::BackgroundTaskStorageCore tasks_;
67
std::vector<SocketData> sockets_;
68
};
69
70
}
// namespace components
71
72
USERVER_NAMESPACE_END
userver
components
tcp_acceptor_base.hpp
Generated on
for userver by
Doxygen
1.17.0