6

私はここでこの前の質問をしました:

TCP両側が同時に接続しようとしています

私は解決策で与えられた方法を試しました.netcatを使用して送信し、Etherealでパケットをスニッフィングしているときに、「hello」文字列を一方から他方に送信すると、プッシュフラグが設定されたセグメントで送信されることがわかりました。

プッシュフラグを設定することを決定したのは誰ですか? tcp セグメントでプッシュまたは緊急フラグを設定するためのルールは何ですか? ソケットAPIを使用してそれを行うことは可能ですか?

4

2 に答える 2

7

PUSH フラグは、tcp スタックによって基本的に「今のところ完了」と言うために使用されます。これは、データ セグメントがソースによって完全に送信されたことを示しているだけです。

ユーザーランド (ソケット API) でそれを示したり制御したりする方法はありません。これは、それを行うための tcp スタック/実装に過ぎないためです。緊急フラグとして。

(出典: Richard Stevens - Tcp/ipillustrated vol 1、第 20 章)

于 2010-02-15T08:56:36.710 に答える
6

send()flag set を使用してURGENT フラグを設定できMSG_OOBます。これが意味するように、送信されるデータはアウトオブバンドになります。つまり、通常、単に を呼び出す呼び出し側では受信されませんread()。受信側は、信号のような OOB データの兆候を取得するSIGURGか、ソケットが例外的になり、 を使用してそのようにチェックできますselect()

ほとんどの場合、URGENT フラグを設定したくありません。

于 2010-02-16T19:56:40.593 に答える