facil.io v0.5.3 Release Notes
-
๐ Change: minor changes to the versioning scheme removed some version MACROS... this isn't API related, so I don't consider it a breaking change, but it might effect code that relied too much on internal workings. The only valid version macros are the
FACIL_VERSION_*
macros, in thefacil.h
header.๐ Change: (
http
) the HTTP/1.x parser was re-written and replaced. It should perform the same, while being easier to maintain. Also, the new parser could potentially be used to author an HTTP client.๐ Change: (
websocket
) the Websocket parser was re-written and replaced, decoupling the parser and message wrapper from the IO layer. Performance might slightly improve, but should mostly remain the same. The new code is easier to maintain and easier to port to other implementations. Also, the new parser supports a client mode (message masking).๐ Fix: (
websocket
) fix #16, where a client's first message could have been lost due to longon_open
processing times. This was fixed by fragmenting theupgrade
event into two events, adding thefacil_attach_locked
feature and attaching the new protocol before sending the response. Credit to @madsheep and @nilclass for exposing the issue and tracking it down to theon_open
callbacks.๐ Fix: (
sock
) sockets created using the TCP/IPsock
library now useTCP_NODELAY
as the new default. This shouldn't be considered a breaking change as much as it should be considered a fix.๐ Fix: (
http1
) HTTP/1.x is now more fragmented, avoiding aread
loop to allow for mid-stream / mid-processing protocol upgrades. This also fixes #16 at it's root (besides the improvedwebsocket
callback handling).๐ Fix: (
http1
) HTTP/1.x now correctly initializes theudata
pointer to NULL fore each new request.๐ Fix: (
facil
) thefacil_run_every
function now correctly calls theon_finish
callback when a timer initialization fails. This fixes a leak that could have occurred due to inconsistent API expectations. Workarounds written due to this issue should be removed.๐ Fix: (
facil
) connection timeout is now correctly ignored for timers.๐ Fix: (
defer
) a shutdown issue indefer_perform_in_fork
was detected by @cdkrot and his fix was implemented.๐ Fix: (
evio
) fixed an issue where the evented IO library failed to reset the state indicator afterevio_close
was called, causing some functions to believe that events are still processed. Now theevio_isactive
will correctly indicate that the evented IO is inactive afterevio_close
was called.๐ Fix: (
evio
) fixes an issue whereevio_add_timer
would fail withEEXIST
instead of reporting success (this might be related to timer consolidation concerns in the Linux kernel).๐ Fix: (
evio
) better timerfd
creation compatibility with different Linux kernels.๐ Fix: (documentation) credit to @cdkrot for reporting an outdated demo in the README.
๐ Fix: (linking) added the missing
-lm
linker flag forgcc
/Linux (I was usingclang
, which automatically links to the math library, so I didn't notice this).Portability: added
extern "C"
directive for untested C++ support.๐ Feature: ๐ added a CLI helper service, allowing easy parsing and publishing of possible command line arguments.
๐ Feature: ๐๐ added a dynamic type library to
facil.io
's core, making some common web related tasks easier to manage.๐ Feature: ๐๐๐ added native JSON support. JSON strings can be converted to
fiobj_s *
objects andfiobj_s *
objects can be rendered as JSON! I'm hoping to get it benchmarked publicly.