diff options
| author | Tomasz Miąsko <tomasz.miasko@gmail.com> | 2016-09-25 00:00:00 +0200 |
|---|---|---|
| committer | Tomasz Miąsko <tomasz.miasko@gmail.com> | 2016-09-26 21:25:59 +0200 |
| commit | c52b957b897a049cfe5f7042eed08fb46ca11c2e (patch) | |
| tree | 74379e59800358d2e77b2798076a26095c2b30cf /src/libstd/sys/unix/net.rs | |
| parent | 3bf4a7ad45bceef2e7ac666f4cbb41a37d6af763 (diff) | |
| download | rust-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.rs | 9 |
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() |
