Я решил проблему в моем коде (с beast 1.70.0
), установив время ожидания как
void
on_resolve(
beast::error_code ec,
tcp::resolver::results_type results)
{
if(ec)
return fail(ec, "resolve");
// Set a timeout on the operation
ws_.next_layer().expires_after(std::chrono::seconds(30));
// Make the connection on the IP address we get from a lookup
ws_.next_layer().async_connect(
results,
beast::bind_front_handler(
&session::on_connect,
shared_from_this()));
}
Я также сделал некоторые изменения в моем коде (с beast 1.68.0
) следующим образом
void Foo::closetimer_websocket(beast::error_code ec) {
if (ec.message() == "Success") {
ioc.stop();
}
}
// closetimer_websocket is the member of class Foo. And FooObject is its instance
void session::SetAsyncOpTimeoutInSec(unsigned int time_inSeconds) {
TcpTimer.expires_from_now((boost::posix_time::seconds(time_inSeconds)));
TcpTimer.async_wait(bind(&Foo::closetimer_websocket, FooObject, placeholders::_1));
}
void session::on_resolve(beast::error_code ec,
tcp::resolver::results_type results) {
if(ec)
return fail(ec, "resolve");
//Set the timeout
SetAsyncOpTimeoutInSec(5);
// Make the connection on the IP address we get from a lookup
net::async_connect(ws_.next_layer().next_layer(), results.begin(),
results.end(),
bind(&session::on_connect, shared_from_this(), placeholders::_1));
}