websocketについて学ぶためにcwebsocketというCのwebsocketライブラリのコードを読んでいます。
READMEにある通り、この実装ではpayloadの大きさが0xFFFFより大きいフレームをサポートしていません。

Not supported

big frames, which payload size bigger than 0xFFFF

仮にこのライブラリをどんな大きさのフレームにも対応させるにはどうすればいいのでしょうか?

考えられるやり方としては

  1. フレームの最初の16bitを受け取る
  2. 受け取った16bitの中の後ろ7bitを確認
  3. 2での値によってpayload長のbit数が違うのでその分をmallocで確保してrecvする
  4. payloadの長さがわかったらその大きさの量をmallocして読み込む

という方法がありますがmallocが何度も起こってしまいます。
他に良い方法はないのでしょうか?