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
相关产品推荐
相关产品推荐

