diff --git a/include/opendht/http.h b/include/opendht/http.h
index 2812228a38d06f0edaec16a87c94415108f119a2..1626e0c32377764240fe81ef1c6117785ba94feb 100644
--- a/include/opendht/http.h
+++ b/include/opendht/http.h
@@ -171,6 +171,7 @@ private:
     Url url_;
     asio::error_code ec_;
     asio::ip::tcp::resolver resolver_;
+    std::shared_ptr<bool> destroyed_;
     std::vector<asio::ip::tcp::endpoint> endpoints_;
 
     bool completed_ {false};
diff --git a/src/http.cpp b/src/http.cpp
index 9a54266ead48f6ac18dba9180fcc945c5a6a790d..5970fe030dc26de855b740513c8a1665f968154e 100644
--- a/src/http.cpp
+++ b/src/http.cpp
@@ -301,14 +301,14 @@ Connection::timeout(const std::chrono::seconds timeout, HandlerCb cb)
 // Resolver
 
 Resolver::Resolver(asio::io_context& ctx, const std::string& url, std::shared_ptr<dht::Logger> logger)
-    : url_(url), resolver_(ctx), logger_(logger)
+    : url_(url), resolver_(ctx), destroyed_(std::make_shared<bool>(false)), logger_(logger)
 {
     resolve(url_.host, url_.service);
 }
 
 Resolver::Resolver(asio::io_context& ctx, const std::string& host, const std::string& service,
                    const bool ssl, std::shared_ptr<dht::Logger> logger)
-    : resolver_(ctx), logger_(logger)
+    : resolver_(ctx), destroyed_(std::make_shared<bool>(false)), logger_(logger)
 {
     url_.host = host;
     url_.service = service;
@@ -318,7 +318,7 @@ Resolver::Resolver(asio::io_context& ctx, const std::string& host, const std::st
 
 Resolver::Resolver(asio::io_context& ctx, std::vector<asio::ip::tcp::endpoint> endpoints, const bool ssl,
                    std::shared_ptr<dht::Logger> logger)
-    : resolver_(ctx), logger_(logger)
+    : resolver_(ctx), destroyed_(std::make_shared<bool>(false)), logger_(logger)
 {
     url_.protocol = (ssl ? "https" : "http");
     endpoints_ = std::move(endpoints);
@@ -338,6 +338,7 @@ Resolver::~Resolver()
             cb(asio::error::operation_aborted, {});
         cbs.pop();
     }
+    *destroyed_ = true;
 }
 
 void
@@ -355,10 +356,10 @@ Resolver::resolve(const std::string& host, const std::string& service)
 {
     asio::ip::tcp::resolver::query query_(host, service);
 
-    resolver_.async_resolve(query_, [this, host, service]
+    resolver_.async_resolve(query_, [this, host, service, destroyed = destroyed_]
         (const asio::error_code& ec, asio::ip::tcp::resolver::results_type endpoints)
     {
-        if (ec == asio::error::operation_aborted)
+        if (ec == asio::error::operation_aborted or *destroyed)
             return;
         if (logger_){
             if (ec)