web-dev-qa-db-ja.com

recvmsgは「EAGAIN(リソースが一時的に利用不可)」を返します

最近のサーバーの移動後、明らかな理由もなくサーバーの1つがn/w接続を失い、数秒または数分で接続を回復するという奇妙な問題のトラブルシューティングを行っています。 _/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を実行します

11
Sree

ソケット(またはパイプまたはその他の非同期ソース)から読み取る場合、すぐに使用できるデータがない場合に何を行うかを選択できます。一部のデータが到着するまで読み取りを待機させるか(ブロッキングモード)、エラーですぐに返すようにすることができます(非ブロッキングモード)。

2番目のケースで返されるエラーはEAGAINです。

したがって、EAGAINエラーは、ここでは何も伝えていません。それは、そのrecvmsg()がそのときに受け取ることが何もなかったことを意味します。

12
Jander

stdinがないときにstdinから読み取ろうとすると、このエラーが発生しました。 isTTYはfalseでした。

0
localhostdotdev