在 Rust 中检测 ConnectionReset,而不是让线程崩溃

Detecting a ConnectionReset in Rust, instead of having the Thread panic

所以我在 Rust 中有一个多线程程序,它向我的网站发送获取请求,我想知道如何检测 ConnectionReset。 我想做的是,在请求之后,检查是否有 ConnectionReset,如果有,请等待一分钟,这样线程就不会 panic

我现在使用的代码

let mut req = reqwest::get(&url).unwrap();

执行后我想检查是否有 ConnectionReset,然后是 println(“连接错误”),而不是让线程崩溃。

我要检测的错误

thread '<unnamed>' panicked at 'called `Result::unwrap()` on an `Err` value: 
Error { kind: Io(Custom { kind: Other, error: Os { code: 10054, kind: ConnectionReset, 
message: "An existing connection was forcibly closed by the remote host." } }), 
url: Some("https://tayhay.vip") }', src\main.rs:22:43

我也阅读了一些关于 std::panic::catch_unwind 的内容,但我不确定那是否是正确的方法。

.unwrap 字面意思是:“出现错误时恐慌”。如果您不想恐慌,则必须自己处理错误。根据您未向我们展示的代码,您在这里有三种解决方案:

  1. 使用 ? operator 传播错误并让调用函数处理它。
  2. 准备好一些默认值以备不时之需(或即时创建)以防出错:
let mut req = reqwest::get (&url).unwrap_or (default);

let mut req = reqwest::get (&url).unwrap_or_else (|_| { default });

(这可能不适用于这种特定情况,因为我不知道什么是合理的默认设置,但它适用于其他错误处理情况)。

  1. 有一些特定的错误处理代码:
match reqwest::get (&url) {
   Ok (mut req) => { /* Process the request */ },
   Err (e) => { /* Handle the error */ },
}

有关更多详细信息,Rust 书有完整的 chapter on error handling