rustls / tokio-rustls

Async TLS for the Tokio runtime
Apache License 2.0
125 stars 70 forks source link

Split `TlsStream` like `TcpStream` #84

Open jmmaloney4 opened 2 months ago

jmmaloney4 commented 2 months ago

Tokio allows splitting a TcpStream into a (Owned)ReadHalf / (Owned)WriteHalf via TcpStream::split / TcpStream::into_split, but I don't believe tokio_rustls allows splitting a TlsStream that wraps a TcpStream. Is there a way to do this with the current API that I'm not thinking of? If not, I'd be interested in helping to implement this feature.

The split method in TcpStream above is not the same as tokio::io::split. It supports true simultaneous reads and writes as opposed to just locking around the syscalls.

cpu commented 2 months ago

I believe the Deno folks have worked on something in this space: https://github.com/denoland/rustls-tokio-stream that might be a useful comparison point.

There's some previous discussion in an issue that was created when the Rustls specific code lived alongside the native-tls code in https://github.com/tokio-rs/tls/issues/40

quininer commented 2 months ago

@cpu tokio-rustls is not affected by https://github.com/tokio-rs/tls/issues/40 .

Any split stream based on rustls must be locked until rustls support full-duplex mode. https://github.com/rustls/rustls/issues/288

cpu commented 2 months ago

@cpu tokio-rustls is not affected by https://github.com/tokio-rs/tls/issues/40 .

Ah! Thanks for clarifying. I had indeed missed that this discussion was centered around native-tls.