recvmsgは「EAGAIN(リソースを一時的に使用できません)」を返します。

recvmsgは「EAGAIN(リソースを一時的に使用できません)」を返します。

最近のサーバーの移動後、私たちは、明確な理由なく、1つのサーバーがネットワークから切断され、数秒または数分で再接続される奇妙な問題を解決しようとしています。/var/log/messages dmesgそれとも痕跡がありませんmcelogs。この問題のデバッグ中に私は発行しました。

strace ping google.com

それは戻ってくる

= -1 EAGAIN (Resource temporarily unavailable)

このメッセージが何を意味するのかを説明できる人はいますか?pinggoogle.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:これはRHEL 6.5を実行するVMware VMです。

ベストアンサー1

ソケット(またはパイプまたは他の非同期ソース)からデータを読み取るときにデータがすぐに利用できない場合はどうなるかを選択できます。一部のデータが到着するまで読み取りを待つか(ブロックモード)、エラーですぐに返すことができます(非ブロックモード)。

2番目の場合に返されるエラーはですEAGAIN

したがって、このEAGAINエラーは実際には何も知らせません。それはただrecvmsg()その時に受け入れることが何もないことを意味します。

おすすめ記事