PDA

Visualizza la versione completa : [C] Select e fd sempre svegli


shmk
29-03-2006, 11:59
Ciao a tutti.
Ho un grosso problema con una select.
Praticamente metto nell'insieme degli fd in lettura un fd di un socket, dopo averlo connesso a un socket listening su un "server".
Il mio problema e' che su questo socket non effettuo assolutamente nessuna operazione,ma la select viene cmq svegliata da non so cosa....

il mio problema e' che non capisco perche' si svegli, visto che non ha nessuna ragione apparente...

io effettuo un:


while(1){
FD_ZERO(&myset);
FD_SET(fd,&myset);
select(maxfd,&myset,NULL,NULL,NULL); //attesa potenzialmente infinita
//do something
}



a questo punto mi chiedo:
1-FD_ZERO azzera tutto il set?
2-Io ho mandato sul fd connesso qualcosa ( un int ) prima di arrivare a questo ciclo, ma nel caso di 1) non dovrebbero esserci problemi...

aiuto, sto impazzendo.... :dhò:


thanks :dottò:

ibykos
29-03-2006, 12:14
La select si sblocca quando un set diventa pronto

i set diventano pronti quando:

readset:

-ci sono dati da leggere
-il peer ha chiuso il canale di lettura
-c'è un nuovo collegamento ad un socket in lettura (tuo caso?)
-si è verificato un errore sul descrittore (tuo caso?)

writeset:

-c'è spazio per scrivere
-il peer ha chiuso il canale in scrittura
-si è verificato errore sul descrittore

exceptset:

-ci sono dati OOB disponibili

shmk
29-03-2006, 12:25
Originariamente inviato da ibykos
La select si sblocca quando un set diventa pronto

i set diventano pronti quando:

readset:

-ci sono dati da leggere
-il peer ha chiuso il canale di lettura
-c'è un nuovo collegamento ad un socket in lettura (tuo caso?)
-si è verificato un errore sul descrittore (tuo caso?)



mi sembra strano, perchè la select è eseguita dopo la connessione.... in teoria dovrei arrivare a un punto in cui la select si blocca, xkè effettivamente non faccio niente, ma lui continua a svegliarsi....

se ho un errore sul descrittore come lo trovo(anche se non credo ci sia, visto che non deve fare niente...)

:dhò:

Loading