ktls-uring-demo
A demo HTTPS client exploring the integration boundaries between io_uring-based networking (via tokio-uring) and userspace TLS (rustls) in rust
The project uses io_uring for asynchronous TCP connection setup and rustls for portable TLS encryption. HTTP methods supported include GET, POST, PUT, PATCH, and DELETE
Architecture Notes
- TLS is handled in userspace thru rustls for portability
- Because rustls operates on blocking Read/Write streams, encrypted I/O does not fully leverage io_uring
- File descriptor duplication (via
libc::dup()) bridges tokio-uring’s ownership model with rustls’s synchronous I/O requirement
Known Behaviors
The client gracefully handles servers that close connections without sending TLS close_notify alerts (commonly obse…
ktls-uring-demo
A demo HTTPS client exploring the integration boundaries between io_uring-based networking (via tokio-uring) and userspace TLS (rustls) in rust
The project uses io_uring for asynchronous TCP connection setup and rustls for portable TLS encryption. HTTP methods supported include GET, POST, PUT, PATCH, and DELETE
Architecture Notes
- TLS is handled in userspace thru rustls for portability
- Because rustls operates on blocking Read/Write streams, encrypted I/O does not fully leverage io_uring
- File descriptor duplication (via
libc::dup()) bridges tokio-uring’s ownership model with rustls’s synchronous I/O requirement
Known Behaviors
The client gracefully handles servers that close connections without sending TLS close_notify alerts (commonly observed with Connection: close) This behavior is technically a protocol violation under TLS 1.2, but is widespread in real-world deployments and intentionally tolerated by most TLS implementations
Usage
cargo run
Resources I used
- tokio-uring Documentation
- rustls Documentation
- rustls Manual – Unexpected EOF Handling
- io_uring Introduction
- Linux kTLS Documentation
use a Linux environment to run the project; if on windows use WSL to run the project