これは、特定のコードに関する質問というよりも、設計に関する質問です。明らかなことを見逃していると確信しています。別の目が必要なだけです。
私はWSAAsyncSelectに基づいてマルチクライアントサーバーを作成しています.各接続は、関連する設定やバッファなどを含む、作成した接続クラスのオブジェクトになります.
私の質問は FD_WRITE に関するものです。それがどのように動作するかは理解しています。接続が確立された直後に 1 つの FD_WRITE が送信されます。その後、WSAEWOULDBLOCK が受信されるまで送信する必要があります。受信した時点で、送信するために残っているものをバッファに格納し、再度送信してもよいというメッセージが表示されるのを待ちます。
これは私が問題を抱えているところです.各接続オブジェクト内でこの保持バッファをどのくらいの大きさにしますか? 新しい FD_WRITE が受信されるまでの時間は不明です。この期間中に大量のデータを送信しようとして、常に発信バッファーに追加されている可能性があります。バッファーを動的にすると、何らかの理由で send() を実行してバッファーを削減できない場合、メモリ使用量が制御不能になる可能性があります。
だから私の質問は、一般的にこの状況をどのように処理しますか? winsock が使用するネットワーク バッファ自体について話しているわけではありませんが、送信を「キューに入れる」ために使用された私自身の作成の 1 つに注意してください。
私はそれを十分に説明したいと思います、ありがとう!