retval = select(1, &rfds, NULL, NULL, &tv);
// Considérer tv comme indéfini maintenant !
if (retval == -1)
perror("select()");
else if (retval)
{
printf("Données disponibles maintenant\n");
/* FD_ISSET(0, &rfds) est vrai */
if (strcmp(ta_string_lue, "exit"))
break;
}
else
printf("Pas de données depuis 5 secondes\n");
}
return EXIT_SUCCESS;
}
Soit tu embarque ce select dans une boucle pour traiter le boulot pendant que tu fais autre chose.
Dans ce cas tu a besoin d'un descripteur supplémentaire qui te permettra du main() de réveiller le select en lui envoyant un "exit" ou autre sur ce flux
[^] # Re: Select ?
Posté par Raphaël G. (site web personnel) . En réponse au message Mon buffer de socket se remplit il ?. Évalué à 2.
Dans ce cas là ton mail va devenir grosso modo ça :
int main(int argc, char **argv)
{
fd_set rfds;
struct timeval tv;
int retval;
while(1)
{
//Reset du descripteur de flux
FD_ZERO(&rfds);
// Surveiller stdin (fd 0) en attente d'entrées
//XXX: change pour ton buffer ici
FD_SET(0, &rfds);
// Pendant 5 secondes maxi
tv.tv_sec = 5;
tv.tv_usec = 0;
retval = select(1, &rfds, NULL, NULL, &tv);
// Considérer tv comme indéfini maintenant !
if (retval == -1)
perror("select()");
else if (retval)
{
printf("Données disponibles maintenant\n");
/* FD_ISSET(0, &rfds) est vrai */
if (strcmp(ta_string_lue, "exit"))
break;
}
else
printf("Pas de données depuis 5 secondes\n");
}
return EXIT_SUCCESS;
}
Soit tu embarque ce select dans une boucle pour traiter le boulot pendant que tu fais autre chose.
Dans ce cas tu a besoin d'un descripteur supplémentaire qui te permettra du main() de réveiller le select en lui envoyant un "exit" ou autre sur ce flux