diff --git a/include/ircd/net/net.h b/include/ircd/net/net.h index e5cd9ad67..a03ae04f7 100644 --- a/include/ircd/net/net.h +++ b/include/ircd/net/net.h @@ -67,6 +67,8 @@ namespace ircd struct ircd::net::init { + std::unique_ptr resolver; + init(); ~init() noexcept; }; diff --git a/ircd/net.cc b/ircd/net.cc index d9afd5f33..9b94c54c7 100644 --- a/ircd/net.cc +++ b/ircd/net.cc @@ -33,10 +33,14 @@ ircd::net::wait_close_sockets() /// Network subsystem initialization ircd::net::init::init() +:resolver +{ + std::make_unique() +} { assert(ircd::ios); assert(!net::dns::resolver); - net::dns::resolver = new struct dns::resolver(); + dns::resolver = resolver.get(); sslv23_client.set_verify_mode(asio::ssl::verify_peer); sslv23_client.set_default_verify_paths(); @@ -44,9 +48,10 @@ ircd::net::init::init() /// Network subsystem shutdown ircd::net::init::~init() +noexcept { wait_close_sockets(); - delete net::dns::resolver; + assert(net::dns::resolver == resolver.get()); net::dns::resolver = nullptr; }