-Subproject commit c34a802d1eb037b44c5252078c7270b5472e0f65
+Subproject commit 03562b0cb26a00f49d4eaf18ca3e49608110b0c8
println!("cargo:rustc-link-lib=pthread");
} else if target.contains("apple-darwin") {
println!("cargo:rustc-link-lib=System");
+
+ // res_init and friends require -lresolv on macOS/iOS.
+ // See #41582 and http://blog.achernya.com/2013/03/os-x-has-silly-libsystem.html
+ println!("cargo:rustc-link-lib=resolv");
} else if target.contains("apple-ios") {
println!("cargo:rustc-link-lib=System");
println!("cargo:rustc-link-lib=objc");
println!("cargo:rustc-link-lib=framework=Security");
println!("cargo:rustc-link-lib=framework=Foundation");
+ println!("cargo:rustc-link-lib=resolv");
} else if target.contains("windows") {
println!("cargo:rustc-link-lib=advapi32");
println!("cargo:rustc-link-lib=ws2_32");
};
let mut res = ptr::null_mut();
unsafe {
- cvt_gai(c::getaddrinfo(c_host.as_ptr(), ptr::null(), &hints,
- &mut res))?;
- Ok(LookupHost { original: res, cur: res })
+ match cvt_gai(c::getaddrinfo(c_host.as_ptr(), ptr::null(), &hints, &mut res)) {
+ Ok(_) => {
+ Ok(LookupHost { original: res, cur: res })
+ },
+ #[cfg(unix)]
+ Err(e) => {
+ // The lookup failure could be caused by using a stale /etc/resolv.conf.
+ // See https://github.com/rust-lang/rust/issues/41570.
+ // We therefore force a reload of the nameserver information.
+ c::res_init();
+ Err(e)
+ },
+ // the cfg is needed here to avoid an "unreachable pattern" warning
+ #[cfg(not(unix))]
+ Err(e) => Err(e),
+ }
}
}
endif
else
ifeq ($(UNAME),Darwin)
+ EXTRACFLAGS := -lresolv
else
ifeq ($(UNAME),FreeBSD)
EXTRACFLAGS := -lm -lpthread -lgcc_s