(「奇妙なTCPコネクション近い行動」原題)からのHTTP接続を終了します。クライアントはサーバーへの接続を開きます(2つの異なるサーバーを試しました)、長いデータストリームの受信を開始します。クライアントがサーバ[FIN、ACK]パケットを停止して送信しようとしているにもかかわらず、サーバがデータの送信を停止していない場合、それは自身のフルストリーム終了まで続き、それ自体の完了パケット[FIN、PSH、ACK] 。私はクライアントがFINパケットを送った後、クライアントのソケットからデータを読み続けることを考え出しました。また、クライアントがこのFINパケットを送信した後、その状態はFIN_WAITであるため、サーバからFIN応答を待っています。が正しくクライアント側
FINパケットを送信してFINパケットに応答する理由は何ですか?
クライアントがFINパケットを送信した後も、サーバはFINを受信する前にオンザフライであったいくつかのパケットを送信しますが、ロングデータストリーム全体ではありません。
編集:読書this私は、Webサーバーが「クローズ待機:サーバーは、終了する準備ができていることをサーバーに知らせるために、最後のアプリケーションプロセスが待機しています」(3行目)とそのデータ送信すべてのコンテンツをその最後のソケットにフラッシュしたときに "完了"したプロセスであり、このプロセスは終了できません。奇妙な。
Edit1:私の質問は少し違うようです。私は完全にクライアント側で接続を終了する必要があるので、サーバーはデータの送信を停止し、クライアント側からの強制終了については狂ったことにはならず、次の接続の準備ができている側のデータ送信スレッドを中断します。
Edit2:環境はHTTPサーバーです。
クライアントが何も受信したくない場合、どうすればよいですか?私はそれを説明する標準が表示されません。そして、クローズ(RST)との接続を終了するだけで、リモート側で予測可能な結果が得られる有効なアクションではないようですか?クライアントが完全になくなっても、サーバーはデータをプッシュし続けるでしょう... – Anonymous
これはクライアントの約束です。それから、クライアントが必要としない情報を受け取らないように、サーバーが不必要なデータの送信を適切に停止し、ハングアップしたり、狂ったりしないように、クライアント側からの接続を完全に中断する方法を少し言い換える必要があります。 – Anonymous
@Anonymousこれは、特定の状況で特定の状況を処理するためにサーバーとクライアントの間で合意が必要となります。プロトコルがこれを行う方法を提供しない場合、これを行う方法はありません。 TCPは、特定のTCPイベントに応答してクライアントまたはサーバーが何をすべきかを指定しません。 –