# io Transport-agnostic I/O primitives shared by the networking modules. Header-only (`tw::io`), namespace `tw::net`. | Path | Contents | | --- | --- | | `io/Read.hpp`, `io/Write.hpp` | `Read` / `Write` interfaces every stream implements (`read_into`, `write`, `flush`, plus `read_exact` helpers) | | `io/BufferReader.hpp`, `io/BufferWriter.hpp` | Buffering decorators that wrap another `Read` / `Write` | | `bytebuffer/ByteBuffer.hpp` | `RingByteBuffer` — circular buffer over a caller-owned `std::span` | | `bytebuffer/ByteBufferReader.hpp`, `ByteBufferWriter.hpp` | Linear cursor read/write over a `std::span` | | `bytebuffer/ByteBufferCodec.hpp`, `ByteBufferEncoder.hpp`, `ByteBufferDecoder.hpp` | Typed push/pop on top of `RingByteBuffer`, specialize `ByteBufferCodec` for custom types | | `NetworkError.hpp` | errno-backed error type returned by `Read` / `Write` | This module owns no sockets and links no transport — it sits below `tw::network` and `tw::quicr` so both can share buffers and stream interfaces without depending on each other.