diff options
author | Teddy Wing | 2017-05-09 01:21:57 +0200 |
---|---|---|
committer | Teddy Wing | 2017-05-09 01:21:57 +0200 |
commit | f0d5da113c59f364ffea3e840a9e871882478051 (patch) | |
tree | 47dcfec5a2577bcbf3152cd0c129daa13981233e /src/main.rs | |
parent | 0fe722bbc2e53278dad2bab9268a3cca52e19825 (diff) | |
download | HearURL-f0d5da113c59f364ffea3e840a9e871882478051.tar.bz2 |
open_stream(): Don't terminate the TCP listener on error
Previously, errors would be returned immediately by the `?`/`try!`s.
Handle errors directly instead of returning them. Otherwise, the stream
listener would terminate, exiting the program, and forcing users to
restart it in order to restore functionality.
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/src/main.rs b/src/main.rs index 40ff310..fcaca7a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,7 +5,6 @@ use getopts::Options; use url::Url; use std::env; -use std::error::Error; use std::io::{self, Write}; use std::io::prelude::*; use std::net::TcpListener; @@ -13,7 +12,7 @@ use std::process::Command; const DEFAULT_PORT: u16 = 37705; -fn open_stream(browser: String, port: u16) -> Result<(), Box<Error>> { +fn open_stream(browser: String, port: u16) -> io::Result<()> { let listener = TcpListener::bind( format!("127.0.0.1:{}", port) )?; @@ -22,15 +21,24 @@ fn open_stream(browser: String, port: u16) -> Result<(), Box<Error>> { match stream { Ok(mut stream) => { let mut url = String::new(); - stream.read_to_string(&mut url)?; - - let url = Url::parse(url.as_str())?; - - Command::new("open") - .arg("-a") - .arg(&browser) - .arg(&url.as_str()) - .spawn()?; + match stream.read_to_string(&mut url) { + Ok(_) => {}, + Err(e) => writeln!(io::stderr(), "{}", e)?, + }; + + match Url::parse(url.as_str()) { + Ok(url) => { + match Command::new("open") + .arg("-a") + .arg(&browser) + .arg(&url.as_str()) + .spawn() { + Ok(_) => {}, + Err(e) => writeln!(io::stderr(), "{}", e)?, + }; + }, + Err(e) => writeln!(io::stderr(), "{}", e)?, + }; } Err(e) => { writeln!(io::stderr(), "{}", e)?; |