Показать сообщение отдельно
Старый 20.06.2010, 16:12   #20
Новичок
 
Аватар для arrjj
 
Регистрация: 27.05.2010
Сообщений: 26
Сказал Спасибо: 1
Имеет 13 спасибок в 11 сообщенях
arrjj пока неопределено
По умолчанию

Слипшиеся/обрезанные пакеты будут приходить всегда, я решил так это:
Код:
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;
}
__________________
#define true false//счастливой отладки суки
arrjj вне форума   Ответить с цитированием
За это сообщение arrjj нажился спасибкой от: