Error Text: rsslPackBuffer() Error: 0017 Not a packable buffer. Error occurred when encoding RSSL_D

display = "ZRN", value=180

Best Answer

  • This error indicates that the code is attempting to pack several messages into a transport buffer from rsslGetBuffer() that was not set as packable.

    The ETA TCP transport provides functionality to pack multiple messages into a single transport buffer, which will then send the packed messages as a single packet on the wire when the buffer passed into rsslWrite. The maximum size allowed by the ETA API for a packable buffer is the maxMsgSize configured on the current rsslChannel. In order to use this functionality, set the packedBuffer argument to true in rsslGetBuffer.

    Please see the following psudocode:

    // RsslChannel chnl has already been established
    RsslBuffer *buf;
    RsslWriteOutArgs outArgs;
    RsslWriteInArgs inArgs;
    RsslError err;
    <Initialize inArgs and outArgs>

    // Get a packable buffer
    buf = rsslGetBuffer(chnl, <Max Msg Size>, RSSL_TRUE, &err);

    while(<not done with messages> && buf->length != 0)
    {
    <Encode message into buf>
    //Set the encoded length of the buffer here
    buf->len = rsslGetEncodedBufferLength(encIter);
    // Call rsslPackBuffer. buf will be the new output
    buf = rsslPackBuffer(chnl, buf, &err);
    }

    // If there's remaining usable memory in the packed buffer, set the length to 0 prior to sending it on the wire.
    if(buf->length != 0)
    buf->length = 0;
    // Write the packed buffer to the wire
    rsslWriteEx(chnl, buf, &outArgs, &inArgs, &err);