72 releases
0.30.1 | Mar 17, 2025 |
---|---|
0.29.2 | Aug 20, 2024 |
0.29.1 | Jun 22, 2024 |
0.27.1 | Jan 2, 2024 |
0.4.1 | Jun 26, 2019 |
#611 in Network programming
166,946 downloads per month
Used in 110 crates
(2 directly)
36KB
661 lines
std::net::TcpStream on steroids
tcp-stream is a library aiming at providing TLS support to std::net::TcpStream
Warning about crypto backends for rustls
A crypto implementation must be enabled in rustls using feature flags. We mimic what rustls does, providing one feature flag per implementation and enabling the same as rustls by default. Available options are:
rustls--aws_lc_rs
(default)rustls--ring
Examples
To connect to a remote server:
use tcp_stream::{HandshakeError, TcpStream, TLSConfig};
use std::io::{self, Read, Write};
fn main() {
let stream = TcpStream::connect("google.com:443").unwrap();
let mut stream = stream.into_tls("google.com", TLSConfig::default());
while let Err(HandshakeError::WouldBlock(mid_handshake)) = stream {
stream = mid_handshake.handshake();
}
let mut stream = stream.unwrap();
while let Err(err) = stream.write_all(b"GET / HTTP/1.0\r\n\r\n") {
if err.kind() != io::ErrorKind::WouldBlock {
panic!("error: {:?}", err);
}
}
stream.flush().unwrap();
let mut res = vec![];
while let Err(err) = stream.read_to_end(&mut res) {
if err.kind() != io::ErrorKind::WouldBlock {
panic!("stream error: {:?}", err);
}
}
println!("{}", String::from_utf8_lossy(&res));
}
Dependencies
~0–20MB
~394K SLoC