2

クライアントにサービスを提供する単純なカスタム HTTP サーバーがあります。

SNDBUF を 512000 に設定すると、すべて正常に動作します。ただし、それを低く設定するか、デフォルトのままにしておくと (それが何であれ)、Chrome と Firefox はすべての応答データを受信しなくなります。同じ)、Chrome は詳細なしでエラーを返します。

問題の特定の応答は約 300000 バイトで、すべて 1 つのチャンクで送信されます。

Rex Swain の HTTP Viewer、curl、wget などのツールは、そのような問題を報告せず、すべてのデータを表示します。

SNDBUF を設定すると、Chrome および Firefox のデータ受信機能に影響するのはなぜですか? SNDBUF がパフォーマンスに与える影響は理解していますが、設定が低すぎるとストリームが破損する可能性があることは理解できません。

4

1 に答える 1

0

基礎となるソケットに一度に書き込むことができるデータの量は、その時点で使用可能な送信バッファーのサイズによって制限されます。Nikolai が言ったように、関数で渡したすべてのデータが送信バッファに書き込まれたかどうかを確認するには、send() または同等の戻り値をチェックする必要があります。そうでない場合は、ソケットが再び「書き込み可能」になるのを待ってから、未処理のデータを書き込む必要があります。

異なるブラウザー/HTTP クライアント間で切り捨てのポイントが異なる理由はいくつかあります。理由の 1 つは、レシーバー (クライアント) のソケットの受信バッファー サイズである可能性があります。これは、実際の伝送速度にも影響を与える TCP 輻輳ウィンドウ サイズ (フロー制御用) がサイズによって決まるためです。別の考えられる理由は、HTTP Viewer/curl/wget が、Chrome や Firefox の読み取りなどよりも速くソケットを読み取っている可能性があることです。

于 2012-11-21T03:25:36.503 に答える