From 143b47a9b216415f1d089028f6178ed0d15affe6 Mon Sep 17 00:00:00 2001 From: Kevin Leimkuhler Date: Wed, 9 Oct 2019 17:21:02 -0700 Subject: [PATCH] Make the `unix::net::SocketAddr` creation methods public Signed-off-by: Kevin Leimkuhler --- src/libstd/sys/unix/ext/net.rs | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/libstd/sys/unix/ext/net.rs b/src/libstd/sys/unix/ext/net.rs index 42edd5dbbea7c..7fc0ae2901e79 100644 --- a/src/libstd/sys/unix/ext/net.rs +++ b/src/libstd/sys/unix/ext/net.rs @@ -106,7 +106,24 @@ pub struct SocketAddr { } impl SocketAddr { - fn new(f: F) -> io::Result + /// Creates a socket address associated with a Unix socket. + /// + /// The returned socket address is in the newly initialized buffer pointed + /// to by `addr` and takes up `len` bytes of space. + /// + /// # Examples + /// + /// ```no_run + /// use std::os::unix::net::UnixListener; + /// + /// let listener = UnixListener::bind("/path/to/the/socket").unwrap(); + /// + /// let sockaddr = SocketAddr::new(|sockaddr, socklen| { + /// let fd = libc::getsockname(listener.as_raw_fd(), sockaddr, socklen); + /// Ok(fd) + /// }).unwrap(); + /// ``` + pub fn new(f: F) -> io::Result where F: FnOnce(*mut libc::sockaddr, *mut libc::socklen_t) -> libc::c_int { unsafe { @@ -117,7 +134,19 @@ impl SocketAddr { } } - fn from_parts(addr: libc::sockaddr_un, mut len: libc::socklen_t) -> io::Result { + /// Creates a socket address from the buffer pointed to by `addr` that is + /// `len` bytes long. + /// + /// # Examples + /// + /// ```no_run + /// let mut sockaddr: libc::sockaddr_un = unsafe { mem::zeroed() }; + /// let mut socklen = mem::size_of_val(&sockaddr) as libc::socklen_t; + /// sockaddr.sun_family = libc::AF_UNIX as libc::sa_family_t; + /// + /// let sockaddr = SocketAddr::from_parts(addr, len).unwrap(); + /// ``` + pub fn from_parts(addr: libc::sockaddr_un, mut len: libc::socklen_t) -> io::Result { if len == 0 { // When there is a datagram from unnamed unix socket // linux returns zero bytes of address