]> git.lizzy.rs Git - rust.git/blobdiff - src/libstd/net/mod.rs
Refactor net::each_addr/lookup_host to forward error from resolve
[rust.git] / src / libstd / net / mod.rs
index be4bcee8a68aeb0f1c098670fb6cb3bc4c51ee71..ff579a5feb12dff1781534e8dd1f1a0f413f6905 100644 (file)
@@ -112,11 +112,15 @@ fn hton<I: NetInt>(i: I) -> I { i.to_be() }
 fn ntoh<I: NetInt>(i: I) -> I { I::from_be(i) }
 
 fn each_addr<A: ToSocketAddrs, F, T>(addr: A, mut f: F) -> io::Result<T>
-    where F: FnMut(&SocketAddr) -> io::Result<T>
+    where F: FnMut(io::Result<&SocketAddr>) -> io::Result<T>
 {
+    let addrs = match addr.to_socket_addrs() {
+        Ok(addrs) => addrs,
+        Err(e) => return f(Err(e))
+    };
     let mut last_err = None;
-    for addr in addr.to_socket_addrs()? {
-        match f(&addr) {
+    for addr in addrs {
+        match f(Ok(&addr)) {
             Ok(l) => return Ok(l),
             Err(e) => last_err = Some(e),
         }