Как в C / C ++ превратить блокирующий сокет в неблокирующий сокет как в WinSocks, так и в * nix; так что select () будет работать правильно. Вы можете использовать препроцессор для кода конкретной платформы.
В Linux:
fcntl(fd, F_SETFL, O_NONBLOCK);
Windows
u_long on = 1; ioctlsocket(fd, FIONBIO, &on);
select () должен работать на блокирующих сокетах. Возвращается, когда read () немедленно возвращается, что всегда имеет место с неблокирующими сокетами.