В системах * Nix файловые дескрипторы являются только индексами в системной таблице, а структура fd_set
содержит битовую маску, соответствующую этим индексам. Когда дескриптор добавляется к fd_set
, соответствующий бит активируется. select()
должен знать наивысшее значение дескриптора, чтобы он мог перебирать биты и знать, к какому из них нужно остановиться.
В Windows сокеты представлены дескрипторами объектов ядра, а не индексами. Структура fd_set
содержит массив дескрипторов сокетов и счетчик числа сокетов в массиве. Таким образом, select()
может просто перебирать массив, и поэтому первый параметр select()
игнорируется в Windows.