提问人:ohxdMAGsDCiCJ 提问时间:11/14/2023 最后编辑:ohxdMAGsDCiCJ 更新时间:11/15/2023 访问量:47
如何在 Rust 中使用 TcpStream 实现关闭 TCP 连接的超时?
How can I implement a timeout for closing a TCP connection using TcpStream in Rust?
问:
我有一个函数,它连接到 TCP 端点,发送一条消息,然后等待两条消息。函数完成后,我想关闭连接。但是,我想为整个函数添加一个超时,以便如果消息交换未在指定时间内完成,连接将断开。在 Rust 中使用 TcpStream 实现此目的的理想方法是什么?
目前,我正在使用 tokio https://docs.rs/tokio/latest/tokio/time/fn.timeout.html 的超时功能。但是,它似乎不是我的用例的最佳选择。
use std::time::Duration;
use tokio::{net::TcpStream, time::timeout};
#[tokio::main]
async fn main() {
connect().await;
}
async fn connect() {
let conn = TcpStream::connect("127.0.0.1:7000").await.unwrap();
// drop the connection within 2 seconds
let _ = timeout(Duration::from_secs(2), do_something(conn)).await;
}
async fn do_something(conn: TcpStream) {
// do something
}
答:
0赞
Sven Marnach
11/14/2023
#1
对于阻塞流,通常为单个连接、读取或写入操作设置超时。非阻塞蒸汽在系统调用级别没有类似物。对于每个连接/读/写,使用应该为您提供与相应阻塞操作的超时大致相同的行为。您还可以使用 tokio_io_timeout::TimeoutStream
配置所有读取和写入操作的超时。tokio::time::timeout()
下一个:Golang 中的 TCP 跟踪
评论
timeout()
tokio