То есть, по заданию параметры readfds, writefds и excefds функций select являются параметрами in / out.
Вы должны инициализировать fd_set перед каждым вызовом, чтобы выбрать:
SOCKET s1;
SOCKET s2;
// open sockets s1 and s2
// prepare select call
FD_ZERO(&mSockets);
FD_SET(s1, &mSockets);
FD_SET(s2, &mSockets);
select(0, &mSockets, 0, 0, 0);
// evaluate select results
if (FD_ISSET(s1, &mSockets))
{
// process s1 traffic
}
if (FD_ISSET(s2, &mSockets))
{
// process s2 traffic
}
Кроме того, Cou может проверить возвращаемое значение выбора.Это указывает на недействительность, если вы вообще можете работать с сокетами.Т.е. нулевой возврат указывает, что все amcros FD_ISSET вернут 0.
РЕДАКТИРОВАТЬ:
Так как readfds, writefds и exceptionfds также out параметрыиз выбранных функций, они изменены.Член fd_count указывает, сколько членов fd_array являются действительными.Вы не должны оценивать fd_array[1]
, если fd_count
меньше 2.