about summary refs log tree commit diff
path: root/src/libstd/sys
diff options
context:
space:
mode:
authorIvan Nejgebauer <inejge@gmail.com>2016-07-07 12:03:31 +0200
committerIvan Nejgebauer <inejge@gmail.com>2016-07-07 12:03:31 +0200
commit0314d179aa07905cc3bd4ec3206be28ff11696f9 (patch)
tree769698b477e568bf3c040a2e999a7f1b7af1f77e /src/libstd/sys
parent4114b68eba6914b46202a2108f34f7653e393851 (diff)
downloadrust-0314d179aa07905cc3bd4ec3206be28ff11696f9.tar.gz
rust-0314d179aa07905cc3bd4ec3206be28ff11696f9.zip
Use hints with getaddrinfo() in std::net::lokup_host()
When resolving a hostname, pass a hints struct where ai_socktype is
set to SOCK_STREAM in order to eliminate repeated results for each
protocol family.
Diffstat (limited to 'src/libstd/sys')
-rw-r--r--src/libstd/sys/common/net.rs12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/libstd/sys/common/net.rs b/src/libstd/sys/common/net.rs
index 274e495d70e..26925b12f93 100644
--- a/src/libstd/sys/common/net.rs
+++ b/src/libstd/sys/common/net.rs
@@ -152,9 +152,19 @@ pub fn lookup_host(host: &str) -> io::Result<LookupHost> {
     init();
 
     let c_host = CString::new(host)?;
+    let hints = c::addrinfo {
+        ai_flags: 0,
+        ai_family: 0,
+        ai_socktype: c::SOCK_STREAM,
+        ai_protocol: 0,
+        ai_addrlen: 0,
+        ai_addr: ptr::null_mut(),
+        ai_canonname: ptr::null_mut(),
+        ai_next: ptr::null_mut()
+    };
     let mut res = ptr::null_mut();
     unsafe {
-        cvt_gai(c::getaddrinfo(c_host.as_ptr(), ptr::null(), ptr::null(),
+        cvt_gai(c::getaddrinfo(c_host.as_ptr(), ptr::null(), &hints,
                                &mut res))?;
         Ok(LookupHost { original: res, cur: res })
     }