Vlákno názorů k článku Sokety a C/C++: Funkce select od Tygrik - V clanku se pise, ze prvni parameter je...

  • Článek je starý, nové názory již nelze přidávat.
  • 2. 6. 2003 14:51

    Tygrik (neregistrovaný)

    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 :-).

  • 2. 6. 2003 18:10

    sss (neregistrovaný)

    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?

  • 2. 6. 2003 19:14

    Tygrik (neregistrovaný)

    Tak jsem se znovu dival, a tentokrat poradne, a vypada to, ze mas pravdu. Asi jsem se prehlidl. Omlouvam se za mylne info.

  • 2. 6. 2003 23:29

    Radim Dostál (neregistrovaný)

    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.