aboutsummaryrefslogtreecommitdiff
path: root/src/sys/unix/uds/stream.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/sys/unix/uds/stream.rs')
-rw-r--r--src/sys/unix/uds/stream.rs15
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)> {