From 34bcfab562bac9887ca9c3831cf4fd0ee7f98149 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Fri, 4 Dec 2020 15:10:09 +0100 Subject: net: move the constant maxWait out of InterruptibleRecv() Move `maxWait` out of `InterruptibleRecv()` and rename it to `MAX_WAIT_FOR_IO` so that it can be reused by other code. --- src/netbase.cpp | 11 +++++------ src/util/sock.h | 7 +++++++ 2 files changed, 12 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/netbase.cpp b/src/netbase.cpp index 0c5b3a220e..5a714f0026 100644 --- a/src/netbase.cpp +++ b/src/netbase.cpp @@ -14,6 +14,7 @@ #include #include +#include #include #include #include @@ -360,9 +361,6 @@ static IntrRecvError InterruptibleRecv(uint8_t* data, size_t len, int timeout, c { int64_t curTime = GetTimeMillis(); int64_t endTime = curTime + timeout; - // Maximum time to wait for I/O readiness. It will take up until this time - // (in millis) to break off in case of an interruption. - const int64_t maxWait = 1000; while (len > 0 && curTime < endTime) { ssize_t ret = sock.Recv(data, len, 0); // Optimistically try the recv first if (ret > 0) { @@ -373,10 +371,11 @@ static IntrRecvError InterruptibleRecv(uint8_t* data, size_t len, int timeout, c } else { // Other error or blocking int nErr = WSAGetLastError(); if (nErr == WSAEINPROGRESS || nErr == WSAEWOULDBLOCK || nErr == WSAEINVAL) { - // Only wait at most maxWait milliseconds at a time, unless + // Only wait at most MAX_WAIT_FOR_IO at a time, unless // we're approaching the end of the specified total timeout - int timeout_ms = std::min(endTime - curTime, maxWait); - if (!sock.Wait(std::chrono::milliseconds{timeout_ms}, Sock::RECV)) { + const auto remaining = std::chrono::milliseconds{endTime - curTime}; + const auto timeout = std::min(remaining, std::chrono::milliseconds{MAX_WAIT_FOR_IO}); + if (!sock.Wait(timeout, Sock::RECV)) { return IntrRecvError::NetworkError; } } else { diff --git a/src/util/sock.h b/src/util/sock.h index 26fe60f18f..23c3c35dad 100644 --- a/src/util/sock.h +++ b/src/util/sock.h @@ -6,10 +6,17 @@ #define BITCOIN_UTIL_SOCK_H #include +#include #include #include +/** + * Maximum time to wait for I/O readiness. + * It will take up until this time to break off in case of an interruption. + */ +static constexpr auto MAX_WAIT_FOR_IO = 1s; + /** * RAII helper class that manages a socket. Mimics `std::unique_ptr`, but instead of a pointer it * contains a socket and closes it automatically when it goes out of scope. -- cgit v1.2.3