#include "AsyncAcceptor.h"
◆ AcceptCallback
| typedef void(* AsyncAcceptor::AcceptCallback) (tcp::socket &&newSocket, uint32 threadIndex) |
◆ AsyncAcceptor()
| AsyncAcceptor::AsyncAcceptor |
( |
Acore::Asio::IoContext & |
ioContext, |
|
|
std::string const & |
bindIp, |
|
|
uint16 |
port, |
|
|
bool |
supportSocketActivation = false |
|
) |
| |
|
inline |
37 :
41 {
44 {
45 LOG_DEBUG(
"network",
"Using socket from systemd socket activation");
46 boost::system::error_code errorCode;
47 _acceptor.assign(boost::asio::ip::tcp::v4(), listen_fd, errorCode);
48 if (errorCode)
49 LOG_WARN(
"network",
"Failed to assign socket {}", errorCode.message());
50 }
51 }
#define LOG_DEBUG(filterType__,...)
Definition Log.h:170
#define LOG_WARN(filterType__,...)
Definition Log.h:162
int get_listen_fd()
Definition Systemd.cpp:55
tcp::endpoint _endpoint
Definition AsyncAcceptor.h:138
std::atomic< bool > _closed
Definition AsyncAcceptor.h:140
std::function< std::pair< tcp::socket *, uint32 >()> _socketFactory
Definition AsyncAcceptor.h:141
std::pair< tcp::socket *, uint32 > DefaultSocketFactory()
Definition AsyncAcceptor.h:135
bool _supportSocketActivation
Definition AsyncAcceptor.h:142
tcp::socket _socket
Definition AsyncAcceptor.h:139
tcp::acceptor _acceptor
Definition AsyncAcceptor.h:137
References DefaultSocketFactory().
◆ AsyncAccept()
template<class T >
| void AsyncAcceptor::AsyncAccept |
( |
| ) |
|
147{
149 {
150 if (!error)
151 {
152 try
153 {
154
155 std::make_shared<T>(std::move(this->
_socket))->Start();
156 }
157 catch (boost::system::system_error const& err)
158 {
159 LOG_INFO(
"network",
"Failed to retrieve client's remote address {}", err.what());
160 }
161 }
162
163
165 this->AsyncAccept<T>();
166 });
167}
#define LOG_INFO(filterType__,...)
Definition Log.h:166
References _acceptor, _closed, _socket, and LOG_INFO.
◆ AsyncAcceptWithCallback()
| void AsyncAcceptor::AsyncAcceptWithCallback |
( |
| ) |
|
|
inline |
58 {
59 tcp::socket* socket;
62 _acceptor.async_accept(*socket, [
this, socket, threadIndex](boost::system::error_code error)
63 {
64 if (!error)
65 {
66 try
67 {
68 socket->non_blocking(true);
69
70 acceptCallback(std::move(*socket), threadIndex);
71 }
72 catch (boost::system::system_error const& err)
73 {
74 LOG_INFO(
"network",
"Failed to initialize client's socket {}", err.what());
75 }
76 }
77
79 this->AsyncAcceptWithCallback<acceptCallback>();
80 });
81 }
std::uint32_t uint32
Definition Define.h:107
References _acceptor, _closed, _socketFactory, and LOG_INFO.
◆ Bind()
| bool AsyncAcceptor::Bind |
( |
| ) |
|
|
inline |
84 {
85 boost::system::error_code errorCode;
86
88 {
90 if (errorCode)
91 {
92 LOG_INFO(
"network",
"Failed to open acceptor {}", errorCode.message());
93 return false;
94 }
95
96#if AC_PLATFORM != AC_PLATFORM_WINDOWS
97 _acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(
true), errorCode);
98 if (errorCode)
99 {
100 LOG_INFO(
"network",
"Failed to set reuse_address option on acceptor {}", errorCode.message());
101 return false;
102 }
103#endif
104
106 if (errorCode)
107 {
109 return false;
110 }
111 }
112
114 if (errorCode)
115 {
116 LOG_INFO(
"network",
"Failed to start listening on {}:{} {}",
_endpoint.address().to_string(),
_endpoint.port(), errorCode.message());
117 return false;
118 }
119
120 return true;
121 }
constexpr auto ACORE_MAX_LISTEN_CONNECTIONS
Definition AsyncAcceptor.h:30
References _acceptor, _endpoint, ACORE_MAX_LISTEN_CONNECTIONS, and LOG_INFO.
◆ Close()
| void AsyncAcceptor::Close |
( |
| ) |
|
|
inline |
124 {
126 return;
127
128 boost::system::error_code err;
130 }
References _acceptor, and _closed.
◆ DefaultSocketFactory()
| std::pair< tcp::socket *, uint32 > AsyncAcceptor::DefaultSocketFactory |
( |
| ) |
|
|
inlineprivate |
◆ SetSocketFactory()
| void AsyncAcceptor::SetSocketFactory |
( |
std::function< std::pair< tcp::socket *, uint32 >()> |
func | ) |
|
|
inline |
◆ _acceptor
| tcp::acceptor AsyncAcceptor::_acceptor |
|
private |
◆ _closed
| std::atomic<bool> AsyncAcceptor::_closed |
|
private |
◆ _endpoint
| tcp::endpoint AsyncAcceptor::_endpoint |
|
private |
◆ _socket
| tcp::socket AsyncAcceptor::_socket |
|
private |
◆ _socketFactory
| std::function<std::pair<tcp::socket*, uint32>()> AsyncAcceptor::_socketFactory |
|
private |
◆ _supportSocketActivation
| bool AsyncAcceptor::_supportSocketActivation |
|
private |
The documentation for this class was generated from the following file: