Я пытаюсь декодировать необработанный поток zlib, поступающий из службы.Документ API говорит, что я должен поддерживать состояние между пакетами.Я пытаюсь сделать это, используя
if(!init_zlib_)
{
infstream_.zalloc = Z_NULL;
infstream_.zfree = Z_NULL;
infstream_.opaque = Z_NULL;
infstream_.avail_in = 0;
infstream_.next_in = Z_NULL;
inflateInit2(&infstream_, -MAX_WBITS);
init_zlib_ = true;
}
do
{
infstream_.avail_in = message_size - ptr;
infstream_.next_in = (Bytef *)(buffer + ptr);
infstream_.avail_out = bufsize;
infstream_.next_out = (Bytef *)outbuffer_;
int status = inflate(&infstream_, Z_SYNC_FLUSH);
switch(status)
{
case Z_OK:
case Z_STREAM_END:
case Z_BUF_ERROR:
break;
default:
fprintf (stderr, "zlib error %d %s\n",
status, infstream_.msg);
}
} while(infstream_.avail_out == 0);
Я могу правильно получить только первое сообщение.Отправьте это, я получаю zlib error -3 invalid stored block lengths
.Что я делаю не так?