Как я могу обнаружить ошибку, а не прерывать эту программу Rust?

При запуске следующей тестовой программы (ниже) с использованием Rust 0.8 на win8, если я запускаю два экземпляра программы одновременно, когда первая программа ожидает ввода (строка 12), то вторая программа прерывается (строка 7) с фатальной ошибкой сообщение ниже.

Чтобы предотвратить фатальную ошибку, я предполагаю, что мне нужно использовать оператор 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" {

Фатальная ошибка, отображаемая вторым экземпляром программы:

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 ответ

Это ошибка, о которой следует сообщить.

Ожидаемое поведение, продемонстрированное моей машиной 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,

Другие вопросы по тегам