PDA

View Full Version : select()


h4mm3r
16-09-2002, 09:04
salve a tutti avrei una domanda da porre che nasce dal fatto che magari non ho le basi solidissime su puntatori, riferimenti ecc ecc..

allora nella programmazione di rete con socket stream in c, è possibile fare riferimento alla primitiva select() che come tutti sappiamo accetta vari parametri. Tra gli altri, non capisco bene perchè bisogna passare il riferimento alla maschera (ad esempio di lettura) e non direttaamente la maschera. E poi non capisco nemmeno come funziona esattamente questa maschera, nel senso: io ho questa maschera di lettura

fdset rset;

la inizializzo a zero

FD_ZERO(&rset);

e poi la setto con una socket da cui poi mi metterò ad aspettare eventi

FD_SET(sd, &rset);

a questo punto cosa succede esattamente? cioè questa set non fa altro che andare nella maschera al bit sd-esimo e porlo uguale a 1? Quindi continuando con la mia ipotesi, ho una maschera con tutti i bit a 0 e uno solo a 1. Analogamente se io volessi associare alla mia maschera un altra socket attraverso la stessa macro, andrei a porre il bit sd-esimo di questa socket a 1 in modo tale da avere all'interno della maschera 6 bit a 0 e 2 a 1?
Quindi la select si va a considerare solo i bit a 1(per quanto ne so io) e a quel punto come fa a capire che è stato ricevuto un evento da quella particolare socket???

boh, spero mi possiate aiutare, perchè ho le idee _alquanto_ confuse

byez

ilsensine
16-09-2002, 09:24
Il discorso è semplice. Tu dici alla select su quali fd effettuare il controllo degli eventi; al ritorno della chiamata, la select ha posto a '1' nell'fd_set il flag relativi agli fd sui quali è accaduto un evento; gli altri vengono posti a 0. Così facendo, puoi fare la select() su un numero arbitrario di descrittori.