V clanku se pise, ze prvni parameter je potreba nastavit takto (Linux):
Ve třech množinách jsou vlastně celá čísla. Vezmeme nejvyšší z těchto čísel, zvýšíme ho o 1 a máme číslo, které předáme jako první parametr.
Tak takhle to neni, i kdyz vysvetleni v manualovych stranakch pise neco podobneho. Ve skutecnosti se dava jako prvni parametr pocet deskriptoru z nejvetsiho setu + 1 (mam-li v setech 1,2 a 3 descriptory, tak tam dam 4). Viz include sys/select.h:
Check the first NFDS descriptors each in READFDS (if not NULL) for read readiness, in WRITEFDS (if not NULL) for write readiness, and in EXCEPTFDS (if not NULL) for exceptional conditions.
SETy jsou staticka pole, ktere se postupne prohledavaji, takze nfds udava pocet prvku, ktere se maji prohledat.
Pokud se s tim nechcete zatezovat, tak pouzijte jako prvni parametr FD_SETSIZE, ktere prohleda cele pole :-).
Neviem, ci je to tak, ako hovoris.
V 'man select' sa pise:
int select(int n, ...
n is the highest-numbered descriptor in any of the three sets, plus 1.
Ako som pozeral kod, stale je fd_set bitove pole a maskuju sa bity, ktore chceme selectovat resp. nechceme.
Takze v Linuxe to nie je pole file descriptorov.
'man select_tut'
hovori to iste.
Aku libc pouzivas?
Trochu jsem znejistěl :-) Ale nakonec si přece jen stojím za svým článkem. Můžete třeba i zkusit v tom ukázkovém serveru (bavíme se o linuxové verzi) změnit první parametr select na konstantní 2. Podle toho, co píšete by mělo první volání select fungovat (V 1. množině je jen jeden soket). Ale nefunguje.