diff options
| author | Ivan Nejgebauer <inejge@gmail.com> | 2016-07-07 12:03:31 +0200 |
|---|---|---|
| committer | Ivan Nejgebauer <inejge@gmail.com> | 2016-07-07 12:03:31 +0200 |
| commit | 0314d179aa07905cc3bd4ec3206be28ff11696f9 (patch) | |
| tree | 769698b477e568bf3c040a2e999a7f1b7af1f77e /src/libstd/sys | |
| parent | 4114b68eba6914b46202a2108f34f7653e393851 (diff) | |
| download | rust-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.rs | 12 |
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 }) } |
