次の状況を理解するための助けを求めています。 1. TCP ソケット接続をピアに確立しました。2. select によって監視されるファイル記述子のリストに追加しました。 3. select はソケット上のアクティビティを警告し、アプリケーションはソケット上のピアから送信されたデータを処理します。4. ここで、ソケットに関連付けられたファイル記述子を、select によって監視されるファイル記述子のリストから削除します。5. ピアがそのソケットでデータを送信します。私はそのデータを読みません。6. 数秒後、再び、ソケットに関連付けられたファイル記述子を、select によって監視されるファイル記述子のリストに追加します。ステップ 5 で、ピアが私にデータを送信せず、FIN 以来と言う場合はどうでしょうか。要約すると、ソケットが読み取り可能であることを引き続き選択します。
1 に答える
2
- すぐに選択して、ソケットが読み取り可能であることを知らせますか?
はい。
ステップ 5 で、ピアが私にデータを送信せず、FIN 以来と言う場合はどうでしょうか。ソケットが読み取り可能であることを引き続き選択します
はい。
要約すると、問題は、監視対象のファイル記述子のリストにソケットを含める前にソケットで何らかのアクティビティがあった場合に、select (または epoll などのそのバリアントのいずれか) がソケットが読み取り可能であることを示しているかどうかです。ソケットからデータを読み取っていません
はい。
NB「監視対象のファイル記述子のリストにソケットを含める前」は、実際には何の意味もありません。オペレーティングシステムは、いつそれを行ったかを知りません。あなたがそのリストで呼び出したことだけを知っていますselect()
。
于 2013-08-30T09:43:57.357 に答える