如何检测错误而不是让Rust程序中止?

时间:2013-11-01 04:23:58

标签: rust rust-0.8

当在win8上使用Rust 0.8运行以下测试程序(如下)时,如果我同时运行程序的两个实例,当第一个程序等待输入时(第12行),则第二个程序中止(第7行)以下是致命错误消息。

为了防止致命错误,我认为我需要使用匹配语句,但我还不了解类型系统并使用匹配,但我已经尝试过了。

在这种情况下,如何让下面的程序优雅地失败而不是中止?

示例测试程序:

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" {

第二个程序实例显示的致命错误:

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

1 个答案:

答案 0 :(得分:1)

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

正如我的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