Fixed Windows SocketSelector Exception

In Windows, if fr::SocketSelector::wait(...) was called, and the socket selector was empty, then an exception would be thrown as a result of Windows behaving differently to UNIX sockets. Now, the call will sleep for timeout before returning false, to match UNIX behaviour.
This commit is contained in:
Cloaked9000 2017-01-06 16:15:04 +00:00
parent f0894e9d35
commit 02ab3634c4

View File

@ -2,6 +2,7 @@
// Created by fred on 09/12/16.
//
#include <thread>
#include "frnetlib/SocketSelector.h"
namespace fr
@ -27,6 +28,16 @@ namespace fr
bool SocketSelector::wait(std::chrono::milliseconds timeout)
{
//Windows will crash if we pass an empty set. Do a check.
#ifdef _WIN32
if(listen_set.fd_count == 0)
{
//It's empty. Emulate UNIX behaviour by sleeping for timeout.
std::this_thread::sleep_for(timeout);
return false;
}
#endif
timeval wait_time;
wait_time.tv_sec = 0;
wait_time.tv_usec = std::chrono::duration_cast<std::chrono::microseconds>(timeout).count();