diff options
Diffstat (limited to 'src/sys/unix/uds/stream.rs')
-rw-r--r-- | src/sys/unix/uds/stream.rs | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/src/sys/unix/uds/stream.rs b/src/sys/unix/uds/stream.rs index 9ae4867..461917c 100644 --- a/src/sys/unix/uds/stream.rs +++ b/src/sys/unix/uds/stream.rs @@ -7,23 +7,18 @@ use std::os::unix::net; use std::path::Path; pub(crate) fn connect(path: &Path) -> io::Result<net::UnixStream> { - let socket = new_socket(libc::AF_UNIX, libc::SOCK_STREAM)?; let (sockaddr, socklen) = socket_addr(path)?; let sockaddr = &sockaddr as *const libc::sockaddr_un as *const libc::sockaddr; - match syscall!(connect(socket, sockaddr, socklen)) { + let fd = new_socket(libc::AF_UNIX, libc::SOCK_STREAM)?; + let socket = unsafe { net::UnixStream::from_raw_fd(fd) }; + match syscall!(connect(fd, sockaddr, socklen)) { Ok(_) => {} Err(ref err) if err.raw_os_error() == Some(libc::EINPROGRESS) => {} - Err(e) => { - // Close the socket if we hit an error, ignoring the error - // from closing since we can't pass back two errors. - let _ = unsafe { libc::close(socket) }; - - return Err(e); - } + Err(e) => return Err(e), } - Ok(unsafe { net::UnixStream::from_raw_fd(socket) }) + Ok(socket) } pub(crate) fn pair() -> io::Result<(net::UnixStream, net::UnixStream)> { |