The idea here seems wrong, if we have a mixture of frames of varying
sizes above and below the limit, we segfault in deflate after skipping
it once.
If the protocol doesn't want compression because many frames are
small, it should veto the extension in the user callback. If only
a few frames are tiny, the overhead for compressing it all is tiny.
Signed-off-by: Andy Green <andy.green@linaro.org>
Now we are building with -O0 -g and debug enabled by default.
--disable-debug in configure will get you a -04 without -g
Signed-off-by: Andy Green <andy.green@linaro.org>
Also max protocols to 5 (overridable by configure) and max extensions
from 10 to 3 by default (also overridable by configure).
wsi is down to 608 on x86_64 with this.
Signed-off-by: Andy Green <andy.green@linaro.org>
As reported here
http://libwebsockets.org/trac/ticket/11
the code for connection storm handling had rotted, fds[0] is no longer
always related to the listen socket when serving.
This patch updates it to determine the listen socket correctly to stop
infinite recursion here.
Reported-by: amn
Signed-off-by: Andy Green <andy.green@linaro.org>
Now we enforce nonblocking everywhere, hopefully properly,
this rx timeout stuff shouldn't be needed.
Signed-off-by: Andy Green <andy.green@linaro.org>
Noticed previously the test client lifetime is decoupled from
the actual send activity. With SSL if the connection starts but
there is a period of SSL-layer "blocking" (actually fail-and-retry)
the mirror lifetime could be exhausted before the connection really
completed, making it stall after it was then closed.
This corrects that so connection lifetime management is done in the
send callback.
Signed-off-by: Andy Green <andy.green@linaro.org>
*** This patch changes an API all apps use ***
Context creation parameters are getting a bit out of control, this
patch creates a struct to contain them.
All the test apps are updated accordingly.
Signed-off-by: Andy Green <andy.green@linaro.org>
A new protocol member is defined that controls the size of rx
buffer allocation per connection. For compatibility 0 size
allocates 4096, but you should adapt your protocol definition
array in the user code to declare an appropriate value.
See the changelog for more detail.
The advantage is the rx frame buffer size is now tailored to
what is expected from the protocol, rather than being fixed
to a default of 4096. If your protocol only sends frames of
a dozen bytes this allows you to only allocate an rx frame
buffer of the same size.
For example the per-connection allocation (excluding headers)
for the test server fell from ~4500 to < 750 bytes with this.
Signed-off-by: Andy Green <andy.green@linaro.org>
This gets rid of the stack buffer while serving files, and the
PATH_MAX char array that used to hold the filepath in the wsi.
It holds an extra file descriptor open while serving the file,
however it attempts to stuff the socket with as much of the
file as it can take. For files of a few KB, that typically
completes (without blocking) in the call to
libwebsockets_serve_http_file() and then closes the file
descriptor before returning.
Signed-off-by: Andy Green <andy.green@linaro.org>
This reduces the size of struct libwebscocket from 4840 to 4552
on x86_64
There are also big benefits on malloc pool fragmentation and
allocation, the header allocations only exist between the first
peer communication and websocket connection establishment for
both server and client.
Signed-off-by: Andy Green <andy.green@linaro.org>