Programme en C, compilé avec gcc. J'ai un comportement que je ne
parviens pas à expliquer avec l'appel select(..). Voilà en gros
l'algorithme :
//un descripteur "sock", créé avec socket(PF_INET, SOCK_DGRAM, ..)
//un jeu de descripteurs "set" qui ne contient que sock
while(condition) {
attente.tv_sec = 0;
attente.tv_usec = 100000;
int ret = select(sock+1, set, NULL, NULL, &attente);
if (ret < 0) perror(select);
if (ret == 0) {
printf("timeout\n");
continue;
}
printf("données dispo\n");
recv(sock, buffer, ..);
//utilisation des données
}
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
fabrizio
02/04/2008 12:28 - fabrizio :
Bonjour,
Programme en C, compilé avec gcc. J'ai un comportement que je ne parviens pas à expliquer avec l'appel select(..). Voilà en gros l'algorithme : //un descripteur "sock", créé avec socket(PF_INET, SOCK_DGRAM, ..) //un jeu de descripteurs "set" qui ne contient que sock while(condition) { attente.tv_sec = 0; attente.tv_usec = 100000; int ret = select(sock+1, set, NULL, NULL, &attente); if (ret < 0) perror(select); if (ret == 0) { printf("timeoutn"); continue; } printf("données dispon"); recv(sock, buffer, ..); //utilisation des données }
Tcpdump m'indique que les packets arrivent effectivement (sur le bon port), mais select(..) continue à retourner un timeout.
Ce comportement est-il normal ? Le cas échéant, quelle boulette ai-je pu faire ?
Toute idée est la bienvenue, Fabrice
J'oubliai de préciser que le programme est multithread et compilé contre la bibliothèque pthread (NPTL) et que tout ceci tourne sur un noyau 2.6.22.1-rt9.
02/04/2008 12:28 - fabrizio :
Bonjour,
Programme en C, compilé avec gcc. J'ai un comportement que je ne
parviens pas à expliquer avec l'appel select(..). Voilà en gros
l'algorithme :
//un descripteur "sock", créé avec socket(PF_INET, SOCK_DGRAM, ..)
//un jeu de descripteurs "set" qui ne contient que sock
while(condition) {
attente.tv_sec = 0;
attente.tv_usec = 100000;
int ret = select(sock+1, set, NULL, NULL, &attente);
if (ret < 0) perror(select);
if (ret == 0) {
printf("timeoutn");
continue;
}
printf("données dispon");
recv(sock, buffer, ..);
//utilisation des données
}
Tcpdump m'indique que les packets arrivent effectivement (sur le bon
port), mais select(..) continue à retourner un timeout.
Ce comportement est-il normal ?
Le cas échéant, quelle boulette ai-je pu faire ?
Toute idée est la bienvenue,
Fabrice
J'oubliai de préciser que le programme est multithread et compilé contre
la bibliothèque pthread (NPTL) et que tout ceci tourne sur un noyau
2.6.22.1-rt9.
Programme en C, compilé avec gcc. J'ai un comportement que je ne parviens pas à expliquer avec l'appel select(..). Voilà en gros l'algorithme : //un descripteur "sock", créé avec socket(PF_INET, SOCK_DGRAM, ..) //un jeu de descripteurs "set" qui ne contient que sock while(condition) { attente.tv_sec = 0; attente.tv_usec = 100000; int ret = select(sock+1, set, NULL, NULL, &attente); if (ret < 0) perror(select); if (ret == 0) { printf("timeoutn"); continue; } printf("données dispon"); recv(sock, buffer, ..); //utilisation des données }
Tcpdump m'indique que les packets arrivent effectivement (sur le bon port), mais select(..) continue à retourner un timeout.
Ce comportement est-il normal ? Le cas échéant, quelle boulette ai-je pu faire ?
Toute idée est la bienvenue, Fabrice
J'oubliai de préciser que le programme est multithread et compilé contre la bibliothèque pthread (NPTL) et que tout ceci tourne sur un noyau 2.6.22.1-rt9.
fabrizio
Je continue à me répondre à moi-même.
Timeout donc fd_set vide. Donc moi pas savoir bien lire.
Je me remercie bien.
Je continue à me répondre à moi-même.
Timeout donc fd_set vide. Donc moi pas savoir bien lire.
Timeout donc fd_set vide. Donc moi pas savoir bien lire.
Je me remercie bien.
Cyrille Lefevre
Je continue à me répondre à moi-même.
Timeout donc fd_set vide. Donc moi pas savoir bien lire.
Je me remercie bien.
Hi, Bonjour,
de rien :)
Regards, Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre. remove "%nospam" and ".invalid" to answer me.
Je continue à me répondre à moi-même.
Timeout donc fd_set vide. Donc moi pas savoir bien lire.
Je me remercie bien.
Hi, Bonjour,
de rien :)
Regards, Cordialement,
Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%nospam@laposte.net.invalid
supprimer "%nospam% et ".invalid" pour me repondre.
remove "%nospam" and ".invalid" to answer me.