[Libwebsockets] message fragmentation
andy at warmcat.com
Sat Jan 19 00:26:04 CET 2019
On 19/01/2019 02:28, Alexander Zvyagin wrote:
> I started to use libwebsockets last week, so I am sorry in advance if
> my question is naive or I miss something in the documentation.
> I am sending a message from my protocol, the message length is 3780
> bytes. The buffer size is 8192 bytes, lws_write() reports that the
> receive only first 2213 bytes of the message.
> do I get the rest of the message?
if they are fragmented, either by tcp fragmentation or logical ws
fragmentation, then JS itself waits and assembles the complete message
before creating the JS event informing the user code that a ws message
So the real problem is slightly different, right now you are actually
sending a complete (not fragmented) ws message of length 2213, otherwise
such a ws message could not have appeared in your JS.
By default, each time you use lws_write(), it creates a logically
complete message. You have to give it appropriate flags to indicate
that there are multiple fragments in your message.
Since the RFC6455 rules and the flags on top are a bit nonobvious,
there's a helper api to figure out the flags.
* lws_write_ws_flags() - Helper for multi-frame ws message flags
* \param initial: the lws_write flag to use for the start fragment, eg,
* \param is_start: nonzero if this is the first fragment of the message
* \param is_end: nonzero if this is the last fragment of the message
* Returns the correct LWS_WRITE_ flag to use for each fragment of a
* in turn.
static LWS_INLINE int
lws_write_ws_flags(int initial, int is_start, int is_end)
You can see it being used here:
> Thanks a lot in advance!
> Libwebsockets mailing list
> Libwebsockets at ml.libwebsockets.org
More information about the Libwebsockets