Les man pages for select() ne répertorient pas EAGAIN comme code d'erreur possible pour la fonction select().select() sur un tuyau en mode de blocage renvoie EAGAIN
Quelqu'un peut-il expliquer dans quels cas select() peut produire une erreur EAGAIN? Si je comprends bien select_tut man page, EAGAIN peut être produit en envoyant un signal au processus qui est bloqué en attente de sélection(). Est-ce correct?
Depuis que je suis en utilisant select() en mode blocage avec délai d'attente, comme ceci:
bool selectRepeat = true;
int res = 0;
timeval selectTimeout(timeout);
while (true == selectRepeat)
{
res = ::select(fd.Get() + 1,
NULL,
&writeFdSet,
NULL,
&selectTimeout);
selectRepeat = ((-1 == res) && (EINTR == errno));
}
dois-je répéter la boucle lorsque le numéro d'erreur est EAGAIN?
Montrez-nous le code qui configure 'writeFdSet'. J'imagine que c'est faux. Aussi, êtes-vous sûr que la valeur de retour est -1? Sinon, 'errno' n'a rien à voir avec' select' et a probablement été défini par un appel précédent. –
@R Les pages man de select_tut m'ont confondu, car il mentionne EAGAIN et sélectionne. Le retour de select est 0, et EAGAIN est défini qui sait où. –