From 1b3a40f34531083d29cf27cb1920b8b2dd5d58d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Thu, 25 Apr 2019 22:12:28 -0400 Subject: [PATCH] dhtrunner: clear stop file descriptor if still running --- src/dhtrunner.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/dhtrunner.cpp b/src/dhtrunner.cpp index 7583db41..531b9ec1 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; -- GitLab