[Libwebsockets] Return value of libwebsocket_write(): how use?
griscom at suitable.com
Tue May 14 22:32:03 CEST 2013
I'm still investigating when libwebsocket_write() might not send all
of the data I'm trying to send, and how to detect it. (FYI, I'm not
using any extensions, so I'm avoiding that confusion.)
The doc on the return value says "Return may be -1 for a fatal error
needing connection close, or a positive number reflecting the amount
of bytes actually sent. This can be less than the requested number
of bytes due to OS memory pressure at any given time."
Tests reveal that the return value is always be a few greater than
the requested number of characters. For message lengths up to 125
characters I always see a return value of 4 greater than requested;
longer messages give me a return value of 8 greater than requested. I
presume this is the framing characters, with different sizes of
length fields. (I believe I'd see an even larger difference for
messages longer than around 64kB, but I won't be hitting that.)
So, this leads to two questions:
1) Do I have the rules right on how the return value is calculated?
2) Would testing the actual values against these rules tell me if a
message wasn't completely sent?
And finally a suggestion: it seems critical to know whether a _write
fully or only partially succeeded. If this is a real possibility,
then it would be great if the return value did a better job of
indicating when the _write partially succeeded (and partially failed).
Daniel T. Griscom griscom at suitable.com
Suitable Systems http://www.suitable.com/
1 Centre Street, Suite 204 (781) 665-0053
Wakefield, MA 01880-2400
More information about the Libwebsockets