What you can do is this:
Code:
// .h
TBuf<512> iBuffer;
CBufFlat *iData;
// .cpp
RunL()
{
if(iStatus==KErrNone)
{
iData->InsertL(iData->Size(),iBuffer);
if(iData->Size()>=3) // header and length field is ready
{
TPtr8 data(iData>Ptr(0));
TUint8 head1B=data[0];
TUint16 length2B=256*data[2]+data[1];
if(iData->Size()>=length2B+3)
{
// you have the complete data in "data.Mid(3,length2B)"
}
else RecvMore();
}
else RecvMore();
}
}
RecvMore()
{
iSocket.RecvOneOrMore(iBuffer,0,iStatus,iLen);
SetActive();
}