Cでのwebsocketで固定長ではないframeを受信する方法
websocketについて学ぶためにcwebsocketというCのwebsocketライブラリのコードを読んでいます。
READMEにある通り、この実装ではpayloadの大きさが0xFFFFより大きいフレームをサポートしていません。
Not supported
big frames, which payload size bigger than 0xFFFF
仮にこのライブラリをどんな大きさのフレームにも対応させるにはどうすればいいのでしょうか?
考えられるやり方としては
- フレームの最初の16bitを受け取る
- 受け取った16bitの中の後ろ7bitを確認
- 2での値によってpayload長のbit数が違うのでその分をmallocで確保してrecvする
- payloadの長さがわかったらその大きさの量をmallocして読み込む
という方法がありますがmallocが何度も起こってしまいます。
他に良い方法はないのでしょうか?