私はクライアントサーバーアプリに取り組んでいます。私のアプリは可変サイズのパケットで動作しており、各パケットには可変長のヘッダーとペイロードがあります。
私のジレンマは、recv を実行するときにパケットを処理するための最良の方法は何かということです。私が遭遇したチュートリアルのほとんどは、リング バッファーの使用を提案していますが、私が知る限り、処理できる最大のパケットのサイズの 2 倍のサイズのバッファーを使用する方が効率的です。
リング バッファーを使用する場合、recv 用に追加のバッファーが必要であり、リング バッファーにバッファーをコピーする必要があります。つまり、リング バッファーにバッファーを挿入するには、1 つまたは 2 つの memcpys を実行する必要があります。
シングル バッファ アプローチを使用する場合、recv 呼び出しに渡すことができるバッファが 1 つだけ必要であり、フル パケットを取得したときにデータをバッファの先頭に移動するための memmove 呼び出しが必要であり、バッファ内に別のパケットに属するデータがまだ存在します。 .
私は何か間違っていますか?
PS。可変長パケットが処理されるソースコード/例を教えていただければ助かります。