The selection function can be used with a timeout. Although selection is most often used with non-blocking sockets, I have not read anything that prevents the blocking socket from being passed for selection. If the select function is disabled, then you have an equivalent behavior equal to the receive timeout.
From MSDN
"The readfds parameter defines the sockets that should be checked for readability. If the socket is currently in the listening state, it will be marked as readable if an incoming request has been received, so accept is guaranteed to terminate without blocking . For other sockets, readability means that the data in the queue is readable, so calling recv, WSARecv, WSARecvFrom, or recvfrom is not guaranteed to block. "
This should give you the behavior you expect.
source share