RwBase adapter that returns a fixed byte prefix before reading from the underlying stream.
Useful when some already-received bytes must be replayed as if they were still unread on the socket (for example, handshake leftovers buffered by a third-party library).
Writes always go to the underlying stream. The readable awaitable reports ready while unread prefix bytes remain (so engine::WaitAny wakes even if the underlying socket has no data yet); afterwards it follows the underlying stream.
auto underlying = std::make_unique<MemoryRwBase>("world");
std::array<char, 32> buf{};
ASSERT_EQ(11, stream.ReadAll(buf.data(), 11, {}));
EXPECT_EQ(std::string_view(buf.data(), 11), "hello-world");
Definition at line 32 of file prefixed_rw.hpp.
|
| | PrefixedRw (std::string prefix, std::unique_ptr< RwBase > underlying) |
|
| PrefixedRw (const PrefixedRw &)=delete |
|
PrefixedRw & | operator= (const PrefixedRw &)=delete |
|
| PrefixedRw (PrefixedRw &&) noexcept=delete |
|
PrefixedRw & | operator= (PrefixedRw &&) noexcept=delete |
| bool | IsValid () const override |
| | Whether the underlying stream is valid.
|
| bool | WaitReadable (Deadline deadline) override |
| bool | WaitWriteable (Deadline deadline) override |
| | Waits on the underlying stream.
|
| std::optional< size_t > | ReadNoblock (void *buf, size_t len) override |
| | Reads from the prefix first, then from the underlying stream.
|
| size_t | ReadSome (void *buf, size_t len, Deadline deadline) override |
| | Reads from the prefix first, then from the underlying stream.
|
| size_t | ReadAll (void *buf, size_t len, Deadline deadline) override |
| | Reads from the prefix first, then from the underlying stream.
|
| size_t | WriteAll (const void *buf, size_t len, Deadline deadline) override |
| | Forwards to the underlying stream.
|
| size_t | WriteAll (std::span< const IoData > list, Deadline deadline) override |
| | Forwards to the underlying stream.
|
| ReadableBase & | GetReadableBase () |
| WritableBase & | GetWritableBase () |
| AwaitableToken | GetAwaitableToken () |
| | Satisfies engine::Awaitable, for use with engine::WaitAnyContext and friends.
|
| AwaitableToken | GetAwaitableToken () |
| | Satisfies engine::Awaitable, for use with engine::WaitAnyContext and friends.
|
| virtual size_t | WriteAll (std::initializer_list< IoData > list, Deadline deadline) |
| | Sends IoData initializer list using vector I/O (e.g. writev).
|