Fellow C++, Boost, and WG21 Enthusiasts, lend me your ear!
I write to inform you about exciting developments in C++ networking.
There was a recent paper in Kona, P1269R0 ("Three Years with the
Networking TS") about difficulty of implementing timeouts. To address
this, Beast now has a stream class which implements configurable
timeouts for you, and callers no longer have to fiddle with timers
manually anymore. Everything "Just Works." It achieves the P1269R0
author's goal of having timeouts "built-in to asynchronous
operations", but in a way that fits in with the design of the TS:
<https://www.boost.org/doc/libs/master/libs/beast/doc/html/beast/using_io/timeouts.html>
I feel that this `beast::basic_stream` serves as an existence proof
that the current design of Networking TS is sound - the TS offers a
flexible toolbox which lets you build your own framework the way that
you want it, without making odd choices for you. We are still
discovering ways of leveraging it to maximum use. The
beast::websocket::stream also has built-in timeouts, but they are
enhanced to support "idle pings" (keeping client connections alive)
and everything is fully configurable:
This is excellent news. Timeouts are ASIO's biggest downfall. I'll definitely check it out.
If it's low level, and performant enough, then it paves the way for ASIO-ed connectors for things like Redis and ZeroMQ.