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


11

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

回答:


13

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

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

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


0

stdinが存在しないstdin、たとえばisTTYfalseであるときに読み取りを試みたため、このエラーが発生していました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.