Bonjour,
J'ai créé un module qui ouvre une socket....
Je voudrais déclenché l'appel à une fonction à la réception de données dans ma socket sans avoir besoin de faire un pooling.
Est ce faisable? Comment ?
Merci.
Forum Linux.noyau Mon buffer de socket se remplit il ?
2
juil.
2007
# Select ?
Posté par Obsidian . Évalué à 3.
[^] # Re: Select ?
Posté par Raphaël G. (site web personnel) . É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
[^] # Re: Select ?
Posté par steven51 . Évalué à 0.
Sous Windows il y a l'évènement DataArrival... Je suis étonné que sous Linux on ne puisse pas savoir a quel moment on reçoit des données dans la socket.
[^] # Re: Select ?
Posté par galactikboulay . Évalué à 1.
2. Pourquoi ne pas utiliser un thread qui se serait en écoute sur le socket et qui appellerait ta fonction quand des données sont disponibles ?
[^] # Re: Select ?
Posté par Raphaël G. (site web personnel) . Évalué à 1.
Merde, comme j'ai pu envoyer un message imputé de la moitié du texte O_o.
Bon je vais devoir dormir un peu plus alors...
# dico anglais...
Posté par Plinn . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.