Using `asio::deferred` as a completion token defers the initiation of
operations and creates a lazy operation which might even be discarded.
We need to move mutating operations to the initiator function objects or
the constructor of operation objects, which are guaranteed to run when
the deferred operation is launched.
- websocket supports cancellation.
- Iterating test for ws cancellation.
- Only terminal cancellation is forwarded by default.
- basic_stream supports cancellation.
- supported cancellation is documented.
- http cancellation additions.
- Added cancellation_slot tests to http, utils and saved_handler.
- Added post to write.cpp, to avoid SIGSEV in test.
- Refresher describes cancellation in more detail.
C++14 or later is required to support completion tokens that use
per-operation return type deduction. For C++11, a completion
token's async_result specialisation must still provide the nested
typedef `return_type`.
`asio::coroutine` is an extension, which is not part of
the Networking TS, so the `net` alias is not appropriate in this case.
Signed-off-by: Damian Jarek <damian.jarek93@gmail.com>
fix#38
This improves the behavior when encountering a short read:
* Any stream error encountered during a read is converting into
`http::error::partial_message` if some data was received but
the message is incomplete.
* Examples squelch SSL short read errors from the logs.