如何在 TcpStream 上设置连接超时

spi*_*igo 4 tcp rust

我正在尝试使用以下代码连接到无法访问的服务器:

println!("Connecting");
TcpStream::connect(s).unwrap();
println!("Connected");
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,它卡在第二行。

输出:

Connecting
Run Code Online (Sandbox Code Playgroud)

小智 11

如果您在 tokio 中使用异步 rust,那么您可以使用以下命令:-

const CONNECTION_TIME: u64 = 100;

...

let (socket, _response) = match tokio::time::timeout(
     Duration::from_secs(CONNECTION_TIME),
     tokio::net::TcpStream::connect("127.0.0.1:8080")
 )
 .await
 {
     Ok(ok) => ok,
     Err(e) => panic!(format!("timeout while connecting to server : {}", e)),
 }
 .expect("Error while connecting to server")
Run Code Online (Sandbox Code Playgroud)


Aiy*_*ime 8

来自 2020 年的问候。

与此同时,答案发生了变化,不再是“不容易做到”,而是:

TcpStream::connect_timeout()
Run Code Online (Sandbox Code Playgroud)

https://doc.rust-lang.org/std/net/struct.TcpStream.html#method.connect_timeout

  • 关于“tokio::net::TcpStream”,它没有专用方法,因为所有异步操作(包括连接)都可以使用[“tokio::time::timeout”](https://docs. rs/tokio/latest/tokio/time/fn.timeout.html) (3认同)

Chr*_*gan 0

目前无法更改建立 TCP 连接的超时。网络堆栈有自己的默认设置,这些设置可能因操作系统而异;我相信一分钟是典型的超时。

  • 您可能想要修复答案,因为谷歌用户可能会先阅读此内容。请参阅:/sf/answers/4453842431/ (2认同)