私はここでこの前の質問をしました:
私は解決策で与えられた方法を試しました.netcatを使用して送信し、Etherealでパケットをスニッフィングしているときに、「hello」文字列を一方から他方に送信すると、プッシュフラグが設定されたセグメントで送信されることがわかりました。
プッシュフラグを設定することを決定したのは誰ですか? tcp セグメントでプッシュまたは緊急フラグを設定するためのルールは何ですか? ソケットAPIを使用してそれを行うことは可能ですか?
私はここでこの前の質問をしました:
私は解決策で与えられた方法を試しました.netcatを使用して送信し、Etherealでパケットをスニッフィングしているときに、「hello」文字列を一方から他方に送信すると、プッシュフラグが設定されたセグメントで送信されることがわかりました。
プッシュフラグを設定することを決定したのは誰ですか? tcp セグメントでプッシュまたは緊急フラグを設定するためのルールは何ですか? ソケットAPIを使用してそれを行うことは可能ですか?
PUSH フラグは、tcp スタックによって基本的に「今のところ完了」と言うために使用されます。これは、データ セグメントがソースによって完全に送信されたことを示しているだけです。
ユーザーランド (ソケット API) でそれを示したり制御したりする方法はありません。これは、それを行うための tcp スタック/実装に過ぎないためです。緊急フラグとして。
(出典: Richard Stevens - Tcp/ipillustrated vol 1、第 20 章)
send()
flag set を使用してURGENT フラグを設定できMSG_OOB
ます。これが意味するように、送信されるデータはアウトオブバンドになります。つまり、通常、単に を呼び出す呼び出し側では受信されませんread()
。受信側は、信号のような OOB データの兆候を取得するSIGURG
か、ソケットが例外的になり、 を使用してそのようにチェックできますselect()
。
ほとんどの場合、URGENT フラグを設定したくありません。