question

Upvotes
Accepted
21 1 2 6

Error Text: rsslPackBuffer() Error: 0017 Not a packable buffer. Error occurred when encoding RSSL_DT_ENUM for data from enumType.def file. what is best encoding for enumType.def enums?

display = "ZRN", value=180

elektronrefinitiv-realtimetrep
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

1 Answer

Upvotes
Accepted
261 1 2 3

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);

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

Click below to post an Idea Post Idea