EAGAIN是什么意思?

mrd*_*enz 58 c unix sockets posix

在标题中,EAGAIN是什么意思?

Fré*_*idi 60

执行非阻塞I/O时经常会引发EAGAIN.这意味着"目前没有可用的数据,请稍后再试".

可能(或可能不)是相同的EWOULDBLOCK,这意味着"你的线程必须阻止才能这样做".

  • 我的意思是:便携式程序不应该依赖于它们的区别. (8认同)
  • @larsman,"可能"是这里的有效词:) (3认同)
  • 在Linux上EAGAIN和EWOULDBLOCK是相同的值,但真正的可移植代码应检查两者. (3认同)
  • 根据IEEE 1003.1,`EAGAIN`可能与`EWOULDBLOCK`相同.http://www.opengroup.org/onlinepubs/000095399/basedefs/errno.h.html (2认同)

小智 16

使用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.
Run Code Online (Sandbox Code Playgroud)


wil*_*ser 5

这意味着次要的。这意味着什么:

  • 您的系统调用失败
  • 什么都没发生(系统调用是原子的,而这只是没有发生)
  • 可以重试一次(它可能再次失败,可能结果不同)
  • 或者您可以选择其他方式。

整个问题EAGAIN是,您的进程不会在系统调用内被阻塞;它有权选择:重试或执行一些有用的操作。