2010-10-30 12 views

Répondre

47

EAGAIN est souvent élevé lors de l'exécution non-blocking I/O. Cela signifie "il n'y a pas de données disponibles pour le moment, réessayez plus tard".

Il might (ou might not) être le même que EWOULDBLOCK, ce qui signifie « votre fil devrait bloquer afin de le faire ».

+1

Selon IEEE 1003.1, 'EAGAIN' peut être identique à' EWOULDBLOCK'. http://www.opengroup.org/onlinepubs/000095399/basedefs/errno.h.html –

+1

@larsman, "may" étant le mot clé ici :) –

+6

Ce que je veux dire est: un programme portable ne devrait pas compter sur eux étant distinct. –

0

Selon this, cela signifie que "l'opération aurait entraîné la suspension du processus".

12

En utilisant man 2 intro | less -Ip EAGAIN:

 35 EAGAIN Resource temporarily unavailable. This is a temporary condi- 
     tion and later calls to the same routine may complete normally. 
+0

Jusqu'au cœur .. comme ça;) – brunsgaard

+0

Voir 'man 3 errno' à la place sur RHEL/Centos. –

3

Ce que cela signifie est moins important. Qu'est-ce que cela implique:

  • votre appel système a échoué
  • rien ne se passe (appels système sont atomiques, et celui-ci n'a tout simplement pas eu lieu)
  • vous pouvez essayer à nouveau (il pourrait manquer nouveau , éventuellement avec un résultat différent)
  • ou pourrait choisir autrement.

La seule chose à propos de EAGAIN est que votre processus n'est pas bloqué dans l'appel système; il a le droit de choisir: soit réessayer, soit faire quelque chose d'utile.