rust - 在Rust中检测ConnectionReset,而不是使线程处于紧急状态

标签 rust reqwest

因此,我在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/

    相关文章:

    rust - 使用新的异步/等待语法发送多组 HTTP 请求并控制工作人员数量的最快方法

    python - 转换简单的Python请求将POST转换为Rust reqwest

    linux - rust mio 甚至在标准输入上也总是报告

    rust - 在 vec 排水管上捕捉 panic

    rust - 在actix线程中进行同步http客户端访存

    select - 结合使用 Rust 库 reqwest 和 select

    rust - 如何使用reqwest执行并行异步HTTP GET请求?

    rust - 带有删除的双向链表?

    csv - 解析TSV文件(ASCII)的惯用方式

    rust - 有什么方法可以在不关闭子进程的情况下将文件描述符提供给子进程?