about summary refs log tree commit diff
path: root/src/libstd/sys/unix/net.rs
diff options
context:
space:
mode:
authorTomasz Miąsko <tomasz.miasko@gmail.com>2016-09-25 00:00:00 +0200
committerTomasz Miąsko <tomasz.miasko@gmail.com>2016-09-26 21:25:59 +0200
commitc52b957b897a049cfe5f7042eed08fb46ca11c2e (patch)
tree74379e59800358d2e77b2798076a26095c2b30cf /src/libstd/sys/unix/net.rs
parent3bf4a7ad45bceef2e7ac666f4cbb41a37d6af763 (diff)
downloadrust-c52b957b897a049cfe5f7042eed08fb46ca11c2e.tar.gz
rust-c52b957b897a049cfe5f7042eed08fb46ca11c2e.zip
When getaddrinfo returns EAI_SYSTEM retrieve actual error from errno.
Fixes issue #36546. This change also updates libc to earliest version
that includes EAI_SYSTEM constant.
Diffstat (limited to 'src/libstd/sys/unix/net.rs')
-rw-r--r--src/libstd/sys/unix/net.rs9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/libstd/sys/unix/net.rs b/src/libstd/sys/unix/net.rs
index f124ea651ec..ec7ccdf5894 100644
--- a/src/libstd/sys/unix/net.rs
+++ b/src/libstd/sys/unix/net.rs
@@ -10,7 +10,7 @@
 
 use ffi::CStr;
 use io;
-use libc::{self, c_int, size_t, sockaddr, socklen_t};
+use libc::{self, c_int, size_t, sockaddr, socklen_t, EAI_SYSTEM};
 use net::{SocketAddr, Shutdown};
 use str;
 use sys::fd::FileDesc;
@@ -38,7 +38,12 @@ pub struct Socket(FileDesc);
 pub fn init() {}
 
 pub fn cvt_gai(err: c_int) -> io::Result<()> {
-    if err == 0 { return Ok(()) }
+    if err == 0 {
+        return Ok(())
+    }
+    if err == EAI_SYSTEM {
+        return Err(io::Error::last_os_error())
+    }
 
     let detail = unsafe {
         str::from_utf8(CStr::from_ptr(libc::gai_strerror(err)).to_bytes()).unwrap()