make disconnect signal reliable

This commit is contained in:
Eric Mertens 2025-01-26 14:43:26 -08:00
parent ebe884e9d5
commit bb7f09f2e9
2 changed files with 9 additions and 4 deletions

View File

@ -397,14 +397,18 @@ auto Connection::connect(
const auto self = shared_from_this();
const size_t irc_buffer_size = 32'768;
auto& socket = stream_.reset();
{
// Name resolution
auto resolver = boost::asio::ip::tcp::resolver{io};
const auto endpoints = co_await resolver.async_resolve(settings.host, std::to_string(settings.port), boost::asio::use_awaitable);
// Connect to the IRC server
auto& socket = stream_.reset();
const auto endpoint = co_await boost::asio::async_connect(socket, endpoints, boost::asio::use_awaitable);
BOOST_LOG_TRIVIAL(debug) << "CONNECTED: " << endpoint;
// Set socket options
socket.set_option(boost::asio::ip::tcp::no_delay(true));
set_buffer_size(socket, irc_buffer_size);
set_cloexec(socket.native_handle());
@ -455,7 +459,4 @@ auto Connection::connect(
watchdog_timer_.cancel();
stream_.close();
BOOST_LOG_TRIVIAL(debug) << "DISCONNECTED";
sig_disconnect();
}

View File

@ -43,12 +43,16 @@ auto start(boost::asio::io_context &io, const Settings &settings) -> void
{
if (e)
std::rethrow_exception(e);
BOOST_LOG_TRIVIAL(debug) << "DISCONNECTED";
}
catch (const std::exception &e)
{
BOOST_LOG_TRIVIAL(debug) << "TERMINATED: " << e.what();
}
connection->sig_disconnect();
auto timer = std::make_shared<boost::asio::steady_timer>(io);
timer->expires_after(5s);