You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust如何处理向已断开连接客户端发送消息的错误?

问题:向已断开连接的UDP客户端发送消息导致程序崩溃,如何处理?

各位早上好!我是Rust新手,想寻求帮助。

在以下代码中,我模拟向已断开连接的客户端发送消息,当尝试向不再连接的客户端发送消息时程序崩溃,请问该如何处理以避免程序崩溃?

match语句甚至无法生效。

Error: Os { code: 10054, kind: ConnectionReset, message: "Forced cancellation from an existing connection by the remote host." }

原代码:

use tokio::net::UdpSocket;
use std::io;

#[tokio::main]
async fn main() -> io::Result<()> {
    let sock = UdpSocket::bind("0.0.0.0:8080").await?;
    let mut buf = [0; 1024];
    loop {
        let (len, addr) = sock.recv_from(&mut buf).await?;
        println!("{:?} bytes received from {:?}", len, addr);

        let len = sock.send_to(&buf[..len], addr).await?;
        println!("{:?} bytes sent", len);

        match sock.send_to(&buf, "127.0.0.1:23451").await
        {
            Result::Ok(_len) => {
                println!("{:?} bytes sent", _len);
            }
            Result::Err(_) => {
                println!("a error")
            }
        }
    }
}

我发现如果传入无效地址,match可以捕获错误,但传入已断开连接的有效客户端地址时,match无法捕获该错误。


解决方案

感谢各位!

修正后的代码:

use std::io;
use tokio::net::UdpSocket;

#[tokio::main]
async fn main() -> io::Result<()> {
    let sock = UdpSocket::bind("0.0.0.0:8080").await?;
    let mut buf = [0; 1024];
    loop {
        match sock.recv_from(&mut buf).await {
            Result::Ok(data) => {
                let (len, addr) = data;
                println!("{:?} bytes received from {:?}", len, addr);

                let len = sock.send_to(&buf[..len], addr).await?;
                println!("{:?} bytes sent", len);
            }
            Result::Err(e) => {
                println!("{:?}", e);
            }
        }

        // SEND MESAGE TO USER DISCONECTED
        match sock.send_to(&buf, "127.0.0.1:23451").await {
            Result::Ok(_len) => {
                println!("{:?} bytes sent", _len);
            }
            Result::Err(_) => {
                println!("a error 2")
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Claudio Silva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:01:40