From 38e660ccb6120f5440307ba614737b269d03d807 Mon Sep 17 00:00:00 2001 From: chris west Date: Fri, 2 Oct 2020 23:50:40 -0700 Subject: [PATCH] also try all socket_addrs for tls and tor --- src/gopher.rs | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/gopher.rs b/src/gopher.rs index cd9eadd..c66dcd2 100644 --- a/src/gopher.rs +++ b/src/gopher.rs @@ -168,10 +168,10 @@ pub fn request(host: &str, port: &str, selector: &str, tls: bool, tor: bool) -> { { if let Ok(connector) = TlsConnector::new() { - let sock = addr.to_socket_addrs().and_then(|mut socks| { - socks.next().ok_or_else(|| error!("Can't create socket")) - })?; - let stream = TcpStream::connect_timeout(&sock, TCP_TIMEOUT_DURATION)?; + let stream = addr + .to_socket_addrs()? + .find_map(|s| TcpStream::connect_timeout(&s, TCP_TIMEOUT_DURATION).ok()) + .ok_or_else(|| error!("Can't create socket"))?; stream.set_read_timeout(Some(TCP_TIMEOUT_DURATION))?; if let Ok(mut stream) = connector.connect(host, stream) { stream.write_all(selector.as_ref())?; @@ -190,15 +190,11 @@ pub fn request(host: &str, port: &str, selector: &str, tls: bool, tor: bool) -> if tor { #[cfg(feature = "tor")] { - let proxy = std::env::var("TOR_PROXY") + let mut stream = std::env::var("TOR_PROXY") .unwrap_or_else(|_| "127.0.0.1:9050".into()) .to_socket_addrs()? - .next() - .unwrap(); - let mut stream = match TorStream::connect_with_address(proxy, addr.as_ref()) { - Ok(s) => s, - Err(e) => return Err(error!("Tor error: {}", e)), - }; + .find_map(|s| TorStream::connect_with_address(s, addr.as_ref()).ok()) + .ok_or_else(|| error!("Can't create socket"))?; stream.write_all(selector.as_ref())?; stream.write_all("\r\n".as_ref())?; return Ok(Stream {