diff --git a/src/dhtrunner.cpp b/src/dhtrunner.cpp
index 7583db413b011b133dc5692e2256983b2a91baa2..531b9ec10c93f857a114243ed8a78b45e00b04bd 100644
--- a/src/dhtrunner.cpp
+++ b/src/dhtrunner.cpp
@@ -615,14 +615,20 @@ DhtRunner::startNetwork(const SockAddr sin4, const SockAddr sin6)
                 if (not running_network)
                     break;
 
-                if(rc > 0) {
+                if (rc > 0) {
                     std::array<uint8_t, 1024 * 64> buf;
                     sockaddr_storage from;
                     socklen_t from_len = sizeof(from);
 
-                    if(s4 >= 0 && FD_ISSET(s4, &readfds))
+                    if (FD_ISSET(stop_readfd, &readfds)) {
+                        if (recvfrom(stop_readfd, (char*)buf.data(), buf.size(), 0, (sockaddr*)&from, &from_len) < 0) {
+                            std::cerr << "Got stop packet error: " << strerror(errno) << std::endl;
+                            break;
+                        }
+                    }
+                    else if (s4 >= 0 && FD_ISSET(s4, &readfds))
                         rc = recvfrom(s4, (char*)buf.data(), buf.size(), 0, (sockaddr*)&from, &from_len);
-                    else if(s6 >= 0 && FD_ISSET(s6, &readfds))
+                    else if (s6 >= 0 && FD_ISSET(s6, &readfds))
                         rc = recvfrom(s6, (char*)buf.data(), buf.size(), 0, (sockaddr*)&from, &from_len);
                     else
                         continue;