rust - 我怎样才能检测到错误而不是让这个 Rust 程序中止?

标签 rust rust-0.8

在 win8 上使用 Rust 0.8 运行以下测试程序(下)时,如果我同时运行该程序的两个实例,当第一个程序正在等待输入时(第 12 行),然后第二个程序中止(第 7 行)下面是 fatal error 消息。

为了防止 fatal error ,我假设我需要使用 match 语句,但我对类型系统和使用 match 的了解还不够,但我已经尝试过了。

在这种情况下,我怎样才能让下面的程序优雅地失败而不是中止?

示例测试程序:

001  use std::cell::Cell;
002  use std::rt::io::{Writer, Listener, Acceptor};
003  use std::rt::io::net::tcp::TcpListener;
004  use std::rt::io::net::ip::{SocketAddr, Ipv4Addr};
005
006  fn main() {
007      let res_tcp_acceptor = TcpListener::bind(SocketAddr { ip: Ipv4Addr(127, 0, 0, 1),
008                                                          port: 9876}).listen();
009   
010      print("Connected OK. Start Listening? (y/n)  : ");
011
012      let s_input: ~str = std::io::stdin().read_line();  
013
014      if s_input == ~"y" {

程序的第二个实例显示的 fatal error :

task <unnamed> failed at 'assertion failed: `(left == right) && (right == left)`
 (left: `0i32`, right: `-4092i32`)', C:\bot\slave\dist2-win\build\src\libstd\rt\
uv\net.rs:302

最佳答案

这是一个应该报告的错误。

正如我的 Linux 机器所展示的那样,预期的行为是引发 IoError。条件,可以处理但如果不处理将导致任务失败:task '<unnamed>' failed at 'Unhandled condition: io_error: rt::io::IoError{kind: OtherIoError, desc: "address already in use", detail: None}', /home/chris/vc/rust/src/libstd/condition.rs:131 .

关于rust - 我怎样才能检测到错误而不是让这个 Rust 程序中止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19720763/

相关文章:

rust - 如何在 Actix-Web 中打印错误消息而不 panic ?

amazon-ec2 - 我应该使用什么目标三元组来为 AWS Graviton2 实例构建 Rust 项目?

rust - 为什么使用 Rust 将可变结构传递给函数会导致不可变字段?

arrays - 如何在 Rust 0.8 中将 Zip 转换为数组?

rust - Vec和HashMap之间的特征对象差异

arrays - 如何将&mut ndarray::Array传递给函数并对其执行按元素的算术运算?

reference - 将 &T 的迭代器收集到 T 集合中的惯用方法是什么?

function - 在闭包内调用堆上函数参数

rust - 如何在 Rust 中读写文本文件?