Windows sockets have a select function. You give it a socket descriptor and socket to check for readability and a timeout, and it returns a message indicating whether the socket has become readable or a timeout has been reached.
See: http://msdn.microsoft.com/en-us/library/ms740141(VS.85).aspx
Here's how to do it:
bool readyToReceive(int sock, int interval = 1) { fd_set fds; FD_ZERO(&fds); FD_SET(sock, &fds); timeval tv; tv.tv_sec = interval; tv.tv_usec = 0; return (select(sock + 1, &fds, 0, 0, &tv) == 1); }
If it returns true, your next recv call should immediately return to some data.
You can make this more reliable by checking select for the returned error values ββand throwing exceptions in these cases. Here, I simply return true if it says that one descriptor is ready to read, but that means that I return false under all other circumstances, including an already closed socket.
source share