actor-framework 1.2.0
Permanent link:
cppdashboard.dev/r/2026/09/actor-framework-1-2-0An Open Source Implementation of the Actor Model in C++
Release notes
### Changed - We have replaced the actor clock implementation that the actor system uses to delay and schedule messages. The new implementation is much more efficient, outperforming the previous version by an order of magnitude. It is worth noting that this is a purely internal change and does not affect the API. ### Added - Requests that use the new `mail` API now support `as_single` for turning the response handle into a `flow::single` object. - The class `caf::async::consumer_resource<T>` now has a new member function `consume_on` that allows actors to consume data from the resource without having to use a flow. - The class `caf::async::producer_resource<T>` now has a new member function `produce_on` that allows actors to produce data without having to use a flow. This is the symmetric counterpart to `consume_on` on `consumer_resource<T>` and should only be used when flows are not suitable for the use case at hand. - The class `caf::net::ssl::context` now includes `set_cipher_list()` for configuring the cipher list used by the SSL/TLS backend. - The class `caf::net::ssl::context` now has new `backend()` and `backend_name()` functions to query which SSL/TLS library is in use and `backend_version()` to retrieve the backend-specific version number. Currently, only OpenSSL is supported as a backend implementation in CAF, but the API has been designed to prepare for different backends in the future. - The classes `caf::net::lp::client_factory` and `caf::net::web_socket::client_factory` now have a new member function `start_with` that allows starting a connection with custom buffers. This enables users to provide their own `async::consumer_resource` and `async::producer_resource` instances instead of having the factory create them automatically. ### Fixed - Add a missing implementation for `caf::version::check_abi_compatibility`. - Fix a deadlock when disposing an monitor action while it is running (#2169). - Fix a resource leak where sockets were not closed on error, e.g., when an HTTP server rejects an incoming request at the protocol level (#2212). - Fix a build error when passing a TCP accept socket to the high-level DSL for starting an HTTP server. - Fix a bug in the HTTP server implementation with the `max-connections` setting that caused CAF to reject all incoming connections after reaching the limit even after some connections had already been closed (#2227). - Fix a bug in the network stack of CAF that could lead to inconsistent state if the OS re-uses a socket ID too quickly after closing a socket. - Fix case-sensitive HTTP header field name comparisons in the WebSocket client handshake validation. HTTP header names are case-insensitive according to the standard, so servers responding with lowercase headers like `upgrade` instead of `Upgrade` were incorrectly rejected. - Fix an indexing bug when using `message_builder::append_tuple`. - Fix handling of fixture management in the unit test framework. Previously, CAF would create a new instance of the fixture before destroying the previous instance. This could lead to surprising results if a fixture has globally visible side effects in its constructor or destructor. By always deleting the previous fixture instance before creating a new one, we ensure that only one fixture instance exists at any time. - Fix an issue during connection cleanup that caused CAF to send a repeated close frame on WebSocket connections. - Fix a bug in actor shells when calling `quit` (#2299). - Include the port number in the `Host` header field when making HTTP requests to non-standard ports (#2309). - When running an HTTP server, CAF now recognizes the `Expect: 100-continue` HTTP header field and responds to it accordingly. - Fix integer encoding of the `CAF_VERSION` macro (#2350). - Fix a rare crash when creating a flow from an SPSC buffer via `from_resourc…
Share this resource