diff --git a/renderdoc/core/remote_server.cpp b/renderdoc/core/remote_server.cpp index 16b91e691..a024ee570 100644 --- a/renderdoc/core/remote_server.cpp +++ b/renderdoc/core/remote_server.cpp @@ -895,7 +895,7 @@ void RenderDoc::BecomeRemoteServer(const char *listenhost, uint16_t port, while(!killReplay()) { - Network::Socket *client = sock->AcceptClient(false); + Network::Socket *client = sock->AcceptClient(0); if(activeClientData && activeClientData->killServer) break; diff --git a/renderdoc/core/target_control.cpp b/renderdoc/core/target_control.cpp index bcf83ac74..3ab1bc8c9 100644 --- a/renderdoc/core/target_control.cpp +++ b/renderdoc/core/target_control.cpp @@ -377,7 +377,7 @@ void RenderDoc::TargetControlServerThread(Network::Socket *sock) while(!RenderDoc::Inst().m_TargetControlThreadShutdown) { - Network::Socket *client = sock->AcceptClient(false); + Network::Socket *client = sock->AcceptClient(0); if(client == NULL) { diff --git a/renderdoc/os/os_specific.h b/renderdoc/os/os_specific.h index cf289da3c..8fb6524ae 100644 --- a/renderdoc/os/os_specific.h +++ b/renderdoc/os/os_specific.h @@ -166,7 +166,7 @@ public: uint32_t GetTimeout() const { return timeoutMS; } void SetTimeout(uint32_t milliseconds) { timeoutMS = milliseconds; } - Socket *AcceptClient(bool wait); + Socket *AcceptClient(uint32_t timeoutMilliseconds); uint32_t GetRemoteIP() const; diff --git a/renderdoc/os/posix/posix_network.cpp b/renderdoc/os/posix/posix_network.cpp index 88c781647..f6069c885 100644 --- a/renderdoc/os/posix/posix_network.cpp +++ b/renderdoc/os/posix/posix_network.cpp @@ -100,7 +100,7 @@ bool Socket::Connected() const return (int)socket != -1; } -Socket *Socket::AcceptClient(bool wait) +Socket *Socket::AcceptClient(uint32_t timeoutMilliseconds) { do { @@ -125,8 +125,12 @@ Socket *Socket::AcceptClient(bool wait) Shutdown(); } - Threading::Sleep(4); - } while(wait); + const uint32_t sleeptime = 4; + + Threading::Sleep(sleeptime); + + timeoutMilliseconds = RDCMIN(0U, timeoutMilliseconds - sleeptime); + } while(timeoutMilliseconds); return NULL; } diff --git a/renderdoc/os/win32/win32_network.cpp b/renderdoc/os/win32/win32_network.cpp index 622ca6990..c7cda4853 100644 --- a/renderdoc/os/win32/win32_network.cpp +++ b/renderdoc/os/win32/win32_network.cpp @@ -115,7 +115,7 @@ uint32_t Socket::GetRemoteIP() const return ntohl(addr.sin_addr.s_addr); } -Socket *Socket::AcceptClient(bool wait) +Socket *Socket::AcceptClient(uint32_t timeoutMilliseconds) { do { @@ -140,8 +140,12 @@ Socket *Socket::AcceptClient(bool wait) Shutdown(); } - Threading::Sleep(4); - } while(wait); + const uint32_t sleeptime = 4; + + Threading::Sleep(sleeptime); + + timeoutMilliseconds = RDCMIN(0U, timeoutMilliseconds - sleeptime); + } while(timeoutMilliseconds); return NULL; } diff --git a/renderdoc/serialise/streamio_tests.cpp b/renderdoc/serialise/streamio_tests.cpp index b64cda26e..466e2ce5c 100644 --- a/renderdoc/serialise/streamio_tests.cpp +++ b/renderdoc/serialise/streamio_tests.cpp @@ -115,7 +115,7 @@ TEST_CASE("Test stream I/O operations over the network", "[streamio][network]") REQUIRE(sender); - Network::Socket *receiver = server->AcceptClient(false); + Network::Socket *receiver = server->AcceptClient(50); REQUIRE(receiver);