Changes for version 0.17 - 2026-08-12

  • TLS session resumption now survives tls_reload.
  • HTTPS connections no longer pay a wasted SSL_read on every writable event.
  • A TLS connection whose SSL_read blocked wanting a writable socket no longer risks spinning the worker at 100% CPU.
  • SSL_MODE_RELEASE_BUFFERS, so OpenSSL's record buffers are handed back when they drain instead of being pinned for a connection's whole life - a keep-alive server is mostly idle connections.
  • A session id context is now set, without which OpenSSL declines to resume any session on a context that verifies peers: every mTLS connection paid a full handshake and a full chain verification.
  • SNI hostname lookup is a binary search over a sorted, lowercased table rather than a strcasecmp walk of every entry, which is a per-handshake cost that grew with the number of certificates served.
  • close_notify is no longer written for a connection dropped mid-handshake, where there is no session to shut down.
  • Tests no longer derive their listening port from $$.
  • A failed fork during a SIGHUP recycle no longer stores -1 in the child table, where the shutdown sweep would have turned it into kill(-1, SIGTERM) and signalled every process owned by the uid.

Modules

an event-loop PSGI server
epoll readiness backend for Hyperman::Loop
io_uring backend for Hyperman::Loop
kqueue readiness backend for Hyperman::Loop
portable poll(2) backend for Hyperman::Loop
a fast, native, Future-compatible async result
the per-worker event loop
Plack/PSGI adapter for the Hyperman server