2

私のクエリは、setsocketopt() API の「SO_RCVBUF」オプションに関連しています。setsockopt() で SO_RCVBUF に指定された新しい値はいつ有効になりますか?

TCP/IP のフロー制御をテストしており、以下が私の環境です。クライアント プログラムは読み込みが遅く、ソケットは 1 つです。フロー制御をテストするために、接続を確立した後、データを受信する前に、SO_RCVBUF の値を 5000 バイトに減らしています。私の期待は、5000バイト以上を送信した後のサーバープログラムは、クライアントが読み取るのを待つ必要があるということです。しかし、サーバー プログラムは最大 60000 バイトまでデータを送信します。その後、サーバープログラムはクライアントが読み取るのを待ちます。クライアントが最大 55000 バイトを読み取ると、受信バッファの新しい値 (5000 バイト) が使用されていることがわかります。

それは期待されていますか?setsocketopt() の効果はすぐに現れるはずです。受信バッファの初期値は、setsocketopt() の後で何の効果も持たないはずです。

よろしく、 プラシャント

4

1 に答える 1

2

を呼び出す前に SO_RCVBUF を設定する必要があると思いますconnect()。これは、バッファーが割り当てられるときだからです。後で呼び出すと、まったく効果がないか、観察したように効果が遅れる場合があります。

于 2014-04-28T12:32:20.093 に答える