27 个版本
0.3.0 | 2024 年 7 月 12 日 |
---|---|
0.2.24 | 2024 年 5 月 10 日 |
0.2.20 | 2024 年 1 月 16 日 |
0.2.16 | 2023 年 11 月 15 日 |
0.1.0 | 2023 年 5 月 11 日 |
#156 在 网络编程
9,691 每月下载量
用于 28 个 Crates(直接使用 3 个)
125KB
3.5K SLoC
rustls-tokio-stream
rustls-tokio-stream 是一个 Rust crate,为 rustls 提供了 AsyncRead/AsyncWrite 接口。
特性
- 通过
tokio::io::split
等其他方法支持双向 I/O - 不需要读写轮询来执行握手
示例
创建运行在本地的服务器和客户端
fn server_config() -> ServerConfig {
ServerConfig::builder()
.with_safe_defaults()
.with_no_client_auth()
.with_single_cert(vec![certificate()], private_key())
.expect("Failed to build server config")
}
fn client_config() -> ClientConfig {
ClientConfig::builder()
.with_safe_defaults()
.with_no_client_auth()
}
async fn tcp_pair() -> (TcpStream, TcpStream) {
let listener = TcpListener::bind(SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::LOCALHOST, 0)))
.await
.unwrap();
let port = listener.local_addr().unwrap().port();
let server = spawn(async move { listener.accept().await.unwrap().0 });
let client = spawn(async move {
TcpSocket::new_v4()
.unwrap()
.connect(SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::LOCALHOST, port)))
.await
.unwrap()
});
let (server, client) = (server.await.unwrap(), client.await.unwrap());
(server, client)
}
async fn tls_pair() -> (TlsStream, TlsStream) {
let (server, client) = tcp_pair().await;
let server = TlsStream::new_server_side(server, server_config().into());
let client = TlsStream::new_client_side(
client,
client_config().into(),
"example.com".try_into().unwrap(),
);
(server, client)
}
依赖项
~10–19MB
~343K SLoC