因此,我在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
的字面意思是:“在出现错误的情况下 panic ”。如果您不想 panic ,您将不得不自己处理错误。根据未显示给我们的代码,您这里有三种解决方案:
?
operator传播错误,并让调用函数处理该错误。 let mut req = reqwest::get (&url).unwrap_or (default);
或者let mut req = reqwest::get (&url).unwrap_or_else (|_| { default });
(这可能不适用于这种特定情况,因为我不知道什么会导致明智的默认设置,但是它适用于其他错误处理情况)。match reqwest::get (&url) {
Ok (mut req) => { /* Process the request */ },
Err (e) => { /* Handle the error */ },
}
有关更多详细信息,Rust书中包含完整的chapter on error handling。
关于rust - 在Rust中检测ConnectionReset,而不是使线程处于紧急状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66162837/