最近一次服务器移动后,我们正在解决这个奇怪的问题,其中一台服务器无缘无故失去网络连接,并在几秒钟或几分钟内恢复连接。/var/log/messages
dmesg
或中没有它的踪迹mcelogs
。在尝试调试这个问题时,我发出了
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
答案1
当您从套接字(或管道或其他异步源)读取数据时,您可以选择如果没有立即可用的数据,会发生什么情况。您可以让读取等待直到某些数据到达(阻塞模式),也可以让它立即返回并出现错误(非阻塞模式)。
在第二种情况下返回的错误是EAGAIN
。
所以这个EAGAIN
错误并没有真正告诉你任何事情。这只是意味着recvmsg()
当时没有任何东西可以接收。