ソケットプログラミング:帯域外データを処理するにはどうすればよいですか
-
09-09-2019 - |
質問
ちょうど調べてみたところ 帯域外データに関するウィキペディアのエントリ そして、私が理解している限り、OOB データはどういうわけかより重要であるというフラグが立てられ、通常のデータとして扱われますが、別のストリームで送信されるため、私は非常に混乱しています。
実際の質問は次のとおりです (「OOB データとは何か説明していただけますか?」以外):
ソケットを使用する Unix アプリケーションを作成しているので、 選択する() そして、Exceptfds パラメータをどうするか疑問に思っていましたか?すべてのソケットをこのパラメータに入れて、そのようなイベントに反応する必要がありますか?それとも無視するだけでしょうか?
解決
OOB データを処理する必要がないと判断したことは承知していますが、今後、OOB データを処理する必要がある場合に留意すべき点がいくつかあります。 する OOBを気にしてください...
- IPv4はそうではありません 本当に OOB データを別のチャネルまたは異なる優先度で送信します。それはパケットにある単なるフラグです。
- OOB データは非常に限られており、1 バイトです。
- OOB データは、ソケットのオプションに応じてインラインまたは個別に受信できます。
- 次の読み取りに OOB データが含まれていない場合でも、OOB データを通知する「例外」が発生することがあります (送信側のネットワーク スタックは、すでにキューに入っているデータにフラグを立てる可能性があるため、相手側は OOB があることをすぐに認識します)。これは多くの場合、実際の OOB データが利用可能になるまでデータを破棄する「ドレイン」ループに入ることで処理されます。
これが少し混乱していて意味がないと思われる場合、それはほとんどが混乱しているためです。そこには は OOB を使用する十分な理由がありますが、それはまれです。一例として FTP が挙げられます。この場合、ユーザーは大規模な転送の途中で中止を決定する可能性があります。アボートは OOB データとして送信されます。その時点で、サーバーとクライアントはさらに「通常の」データを食べて、まだ転送中のデータを排出します。アボートがデータとともにインラインで処理される場合、未処理のトラフィックはすべて処理され、ダンプされるだけになります。
OOB が必要になった場合に備えて、OOB の存在とその仕組みの基本を知っておくとよいでしょう。ただし、単に興味がある場合を除き、わざわざ徹底的に学習する必要はありません。可能性は十分にあります 一度もない これを使って。
他のヒント