Слипшиеся/обрезанные пакеты будут приходить всегда, я решил так это:
Код:
void l2m_packets::ondata()
{
start:
if((con->bytesAvailable()<2) && (!underflow))
return;
if(!underflow)
{
l2m_uch sz[2];
sz[0]=0;
sz[1]=0;
size=0;
con->read((char*)sz,2);
size=sz[0]+sz[1]*0x100;
if(size==0)
return;
delete [] tmp_buf;
size-=2;
tmp_buf=new l2m_uch[size];
readed=con->read((char*)tmp_buf,size);
if(readed!=size)
{
underflow=true;
return;
}
}
else
{
l2m_uint readed2=0;
readed2=con->read((char*)tmp_buf+readed,size-readed);
readed+=readed2;
if(readed==size)
underflow=false;
else
return;
}
in.buffromuch(tmp_buf,size);
onpacket();
goto start;
}