>>229
selectはあくまで「データがあるかどうか」を調べるだけ。
何バイトあるかなんて知らん。

・データがあれば読み込んでローカルのバッファに溜める
・バッファにデータひとかたまり(ヘッダ+長さ+データ)があれば処理開始

を独立に行えばいい。
複数データが一度にreadできてしまうこともちゃんと考えとけよ。