fix 100% load of CPU after client disconnection
(AdcBaseNetServiceASIO.asyncReceive) add resolving domain name (AdcDeviceNetServerASIO)
This commit is contained in:
@@ -53,21 +53,66 @@ public:
|
||||
}
|
||||
|
||||
|
||||
|
||||
// may throw here!
|
||||
if (endpoint.isTCP()) {
|
||||
asio::ip::tcp::endpoint ept(asio::ip::make_address(endpoint.host()), endpoint.port());
|
||||
// asio::ip::tcp::endpoint ept(asio::ip::make_address(endpoint.host()), endpoint.port());
|
||||
using srv_t = AdcNetServiceASIO<asio::ip::tcp, SessProtoT>;
|
||||
// base_t::template start<Session<srv_t>>("TCP", this, _ioContext, ept);
|
||||
base_t::template start<Session<srv_t>>("TCP", {this, _sessionRecvTimeout, _sessionSendTimeout}, _ioContext,
|
||||
ept);
|
||||
|
||||
// base_t::template start<Session<srv_t>>("TCP", {this, _sessionRecvTimeout, _sessionSendTimeout},
|
||||
// _ioContext,
|
||||
// ept);
|
||||
auto res = std::make_shared<asio::ip::tcp::resolver>(_ioContext);
|
||||
res->async_resolve(
|
||||
endpoint.host(), endpoint.portView(), [endpoint, res, this](std::error_code ec, auto results) {
|
||||
if (ec) {
|
||||
this->logError(
|
||||
"An error occured while resolve hostname ('{}') of the given endpoint! (ec = {})",
|
||||
endpoint.host(), ec.message());
|
||||
this->logError("Cannot start listening at endpoint '{}'!", endpoint.endpoint());
|
||||
} else {
|
||||
if (results.size() == 1) {
|
||||
this->logDebug("Resolved the single IP-address for the hostname '{}'", endpoint.host());
|
||||
} else {
|
||||
this->logDebug("Resolved {} IP-addresses for the hostname '{}'! Use of the first one!",
|
||||
results.size(), endpoint.host());
|
||||
}
|
||||
base_t::template start<Session<srv_t>>("TCP", {this, _sessionRecvTimeout, _sessionSendTimeout},
|
||||
_ioContext, *results.begin());
|
||||
}
|
||||
});
|
||||
|
||||
#ifdef USE_OPENSSL_WITH_ASIO
|
||||
} else if (endpoint.isTLS()) {
|
||||
asio::ip::tcp::endpoint ept(asio::ip::make_address(endpoint.host()), endpoint.port());
|
||||
// asio::ip::tcp::endpoint ept(asio::ip::make_address(endpoint.host()), endpoint.port());
|
||||
using srv_t = AdcNetServiceASIOTLS<asio::ip::tcp, SessProtoT>;
|
||||
// base_t::template start<Session<srv_t>>("TLS", this, _ioContext, ept, std::move(tls_context),
|
||||
// tls_verify_mode);
|
||||
base_t::template start<Session<srv_t>>("TLS", {this, _sessionRecvTimeout, _sessionSendTimeout}, _ioContext,
|
||||
ept, std::move(tls_context), tls_verify_mode);
|
||||
// base_t::template start<Session<srv_t>>("TLS", {this, _sessionRecvTimeout, _sessionSendTimeout},
|
||||
// _ioContext,
|
||||
// ept, std::move(tls_context), tls_verify_mode);
|
||||
|
||||
auto res = std::make_shared<asio::ip::tcp::resolver>(_ioContext);
|
||||
res->async_resolve(
|
||||
endpoint.host(), endpoint.portView(),
|
||||
[endpoint, res, tls_context = std::move(tls_context), tls_verify_mode, this](std::error_code ec,
|
||||
auto results) mutable {
|
||||
if (ec) {
|
||||
this->logError(
|
||||
"An error occured while resolve hostname ('{}') of the given endpoint! (ec = {})",
|
||||
endpoint.host(), ec.message());
|
||||
this->logError("Cannot start listening at endpoint '{}'!", endpoint.endpoint());
|
||||
} else {
|
||||
if (results.size() == 1) {
|
||||
this->logDebug("Resolved the single IP-address for the hostname '{}'", endpoint.host());
|
||||
} else {
|
||||
this->logDebug("Resolved {} IP-addresses for the hostname '{}'! Use of the first one!",
|
||||
results.size(), endpoint.host());
|
||||
}
|
||||
base_t::template start<Session<srv_t>>("TLS", {this, _sessionRecvTimeout, _sessionSendTimeout},
|
||||
_ioContext, *results.begin(), std::move(tls_context),
|
||||
tls_verify_mode);
|
||||
}
|
||||
});
|
||||
|
||||
#endif
|
||||
} else if (endpoint.isLocal()) {
|
||||
if (endpoint.isLocalStream()) {
|
||||
|
||||
@@ -590,9 +590,9 @@ public:
|
||||
}
|
||||
|
||||
auto n_avail = _socket.available();
|
||||
if (!n_avail) {
|
||||
return _socket.async_wait(asio::ip::tcp::socket::wait_read, std::move(self));
|
||||
}
|
||||
// if (!n_avail) {
|
||||
// return _socket.async_wait(asio::ip::tcp::socket::wait_read, std::move(self));
|
||||
// }
|
||||
auto buff = _streamBuffer.prepare(n_avail ? n_avail : 1);
|
||||
|
||||
do_read = false;
|
||||
|
||||
Reference in New Issue
Block a user