From d6237cefcb9fae0286a920b182e9bbc928a57c8a Mon Sep 17 00:00:00 2001 From: Tobias Bucher Date: Fri, 3 Jun 2016 23:10:36 +0200 Subject: Ignore unknown address types when looking up hosts Previously, any function using a `ToSocketAddrs` input would fail if passed a hostname that resolves to an address type different from the ones recognized by Rust. This also changes the `LookupHost` iterator to only include the known address types, as a result, it doesn't have to return `Result`s any more, which are likely misinterpreted as failed name lookups. --- src/libstd/sys/common/net.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'src/libstd/sys/common') diff --git a/src/libstd/sys/common/net.rs b/src/libstd/sys/common/net.rs index 54b9b466c42..3e2a0a8f39a 100644 --- a/src/libstd/sys/common/net.rs +++ b/src/libstd/sys/common/net.rs @@ -119,14 +119,18 @@ pub struct LookupHost { } impl Iterator for LookupHost { - type Item = io::Result; - fn next(&mut self) -> Option> { + type Item = SocketAddr; + fn next(&mut self) -> Option { + let result; unsafe { if self.cur.is_null() { return None } - let ret = sockaddr_to_addr(mem::transmute((*self.cur).ai_addr), - (*self.cur).ai_addrlen as usize); + result = sockaddr_to_addr(mem::transmute((*self.cur).ai_addr), + (*self.cur).ai_addrlen as usize).ok(); self.cur = (*self.cur).ai_next as *mut c::addrinfo; - Some(ret) + } + match result { + Some(r) => Some(r), + None => self.next(), } } } -- cgit 1.4.1-3-g733a5