recvmsg返回“ EAGAIN(资源暂时不可用)”


11

在最近的服务器移动之后,我们正在解决一个奇怪的问题,即其中一台服务器无缘无故失去n / w连接,并在几秒钟或几分钟内恢复连接。在/var/log/messages dmesg或mcelog 中没有任何痕迹。在尝试调试时,我发出strace ping google.com并说= -1 EAGAIN (Resource temporarily unavailable)

有人可以解释这个消息的含义吗?ping可以解析google.com,但不会显示任何响应,就好像在防火墙中将ping回复设置为拒绝一样。

sendmsg(3, {msg_name(16)={sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("74.125.131.113")}, msg_iov(1)=[{"\10\0005\321?i\0\3v\301lT\0\0\0\0\335\331\3\0\0\0\0\0\20\21\22\23\24\25\26\27"..., 64}], msg_controllen=0, msg_flags=0}, 0) = 64
recvmsg(3, 0x7fffd48b9cc0, 0)           = -1 EAGAIN (Resource temporarily unavailable)

PS:这是一个VMware VM,运行RHEL 6.5

Answers:


13

从套接字(或管道或其他异步源)读取数据时,可以选择如果没有立即可用的数据将发生什么情况。您可以让读取等待直到一些数据到达(阻塞模式),或者可以让它立即返回错误(非阻塞模式)。

在第二种情况下返回的错误为EAGAIN

因此,EAGAIN错误并没有真正告诉您任何信息。这只是意味着那时没有什么recvmsg()可接收的。


0

我尝试通过stdin在没有的情况下进行读取来获取此错误stdin,例如,isTTY是错误的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.