これは、すでに回答されている私の以前の質問に関連しています。
C: select 呼び出しを使用して、読み取り中にデータを追跡するにはどうすればよいですか?
私のプロトコルは、他のデータを送信する前に、最初に送信するデータの量を実際に送信します。しかし、昨日、ブラウザを使用してこのコードをテストしたとき、次の 1 つの質問がありました。
多くの人が、メッセージの長さをチェックするが、ブラウザーのシナリオを採用することを提案しました。ブラウザの HTTP リクエストには、最初にサーバーに送信されるときのサイズがありません。ここで、256 バイトのバッファーを使用したと仮定すると、多重化アクションごとに部分ヘッダーを受信し続ける場合、このクライアントのデータ構造をどのように管理すればよいでしょうか? より多くのデータを取得し続けるため、realloc を使用し続け、終了シーケンス ('\r\n') に遭遇すると、すべてのデータが受信されたと想定しますか?
つまり、次のようなものがあります。
typedef struct {
int fd;
char *data;
} CLIENT;
そして、データに再割り当てを使い続けますか? 最大プロトコル ヘッダーのバッファ サイズを割り当てるように言われましたが、それが唯一の方法ですか?