diff --git a/src/dht_proxy_client.cpp b/src/dht_proxy_client.cpp
index 6a1e6c54fb95694fe4127bb2c372ae70724fa8b4..555b9e027837a3b1f3d6eeed1eea55cdaf56d8e2 100644
--- a/src/dht_proxy_client.cpp
+++ b/src/dht_proxy_client.cpp
@@ -1121,10 +1121,12 @@ DhtProxyClient::sendListen(const restinio::http_request_header_t& header,
             std::lock_guard<std::mutex> l(requestLock_);
             requests_[reqid] = request;
         }
-        request->add_on_status_callback([request, seconds = this->listenKeepIdle()] (unsigned status_code) {
+        request->add_on_status_callback([r=std::weak_ptr(request), seconds = this->listenKeepIdle()] (unsigned status_code) {
             if(status_code == 200) {
                 // increase TCP_KEEPIDLE to save power
-                request->get_connection()->set_keepalive(seconds);
+                if (auto request = r.lock()) {
+                    request->get_connection()->set_keepalive(seconds);
+                }
             }
         });
         request->send();