From 739e875117e3eabacc981f870b94117943df107f Mon Sep 17 00:00:00 2001 From: "Eric S. Londres" Date: Sat, 3 Sep 2022 18:01:21 -0400 Subject: [PATCH] actually handle connection errors --- src/lib.rs | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 96c1925..994df24 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -35,7 +35,6 @@ impl Request { } } - impl std::fmt::Display for Request { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { write!(f, "{} {} {}\r\n{}", self.host, self.path, self.content_length, match &self.data { @@ -49,20 +48,26 @@ pub fn get(r: String) -> Result { match Url::parse(&r) { Err(_) => Err("Cannot parse url"), Ok(url) => { - let port = url.port_or_known_default().unwrap(); // patched version of `uri` DOES have a default - let request = Request::from_url(url)?; - let mut connection = std::net::TcpStream::connect(format!("{}:{}", request.host, port)).unwrap(); - let request_string = request.to_string(); - - match connection.write_all(request_string.as_bytes()) { - Err(_) => Err("Error writing to socket"), - Ok(()) => { - let mut buffer = String::new(); - match connection.read_to_string(&mut buffer) { - Err(_) => Err("Unable to read response"), - Ok(_) => Ok(buffer) + if let Some(port) = url.port_or_known_default() { // patched version of `uri` DOES have a default + let request = Request::from_url(url)?; + if let Ok(mut connection) = std::net::TcpStream::connect(format!("{}:{}", request.host, port)) { + let request_string = request.to_string(); + + match connection.write_all(request_string.as_bytes()) { + Err(_) => Err("Error writing to socket"), + Ok(()) => { + let mut buffer = String::new(); + match connection.read_to_string(&mut buffer) { + Err(_) => Err("Unable to read response"), + Ok(_) => Ok(buffer) + } + } } + } else { + Err("Failed to connect to host") } + } else { + Err("Could not figure out port") } } }