Понял: рация на бронетранспортере. 

Дело в том, что сжаты не пакеты, а поток (TCP - потоковый протокол). Т.ч. сперва придется собрать поток. Даже частичное декодирование можно выполнить только начиная с начала потока.
Библиотека zlib сишная.
Самое простое - декодировать все данные сразу (функция uncompress):
http://zlib.net/manual.html#UtilityЕсли нужно декодировать поток:
Контекст хранится в структуре z_stream:
http://zlib.net/manual.html#StreamСтруктуру надо заполнить, проинициализировать (inflateInit), по добалению данных вызывать deflate и в конце закрыть (deflateEnd).
http://zlib.net/manual.html#BasicВ комплекте с zlib идет пример: example.c
Оттуда пример:
void test_deflate(compr, comprLen)
    Byte *compr;
    uLong comprLen;
{
    z_stream c_stream; /* compression stream */
    int err;
    uLong len = (uLong)strlen(hello)+1;
    c_stream.zalloc = (alloc_func)0;
    c_stream.zfree = (free_func)0;
    c_stream.opaque = (voidpf)0;
    err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION);
    CHECK_ERR(err, "deflateInit");
    c_stream.next_in  = (Bytef*)hello;
    c_stream.next_out = compr;
    while (c_stream.total_in != len && c_stream.total_out < comprLen) {
        c_stream.avail_in = c_stream.avail_out = 1; /* force small buffers */
        err = deflate(&c_stream, Z_NO_FLUSH);
        CHECK_ERR(err, "deflate");
    }
    /* Finish the stream, still forcing small buffers: */
    for (;;) {
        c_stream.avail_out = 1;
        err = deflate(&c_stream, Z_FINISH);
        if (err == Z_STREAM_END) break;
        CHECK_ERR(err, "deflate");
    }
    err = deflateEnd(&c_stream);
    CHECK_ERR(err, "deflateEnd");
}