1
Fork 0

Remove inner function in bind, connect and send_to

This commit is contained in:
LinkTed 2020-08-25 19:33:33 +02:00
parent 4c929a00ee
commit 1f3195a5df
3 changed files with 31 additions and 47 deletions

View file

@ -85,17 +85,14 @@ impl UnixDatagram {
/// ``` /// ```
#[stable(feature = "unix_socket", since = "1.10.0")] #[stable(feature = "unix_socket", since = "1.10.0")]
pub fn bind<P: AsRef<Path>>(path: P) -> io::Result<UnixDatagram> { pub fn bind<P: AsRef<Path>>(path: P) -> io::Result<UnixDatagram> {
fn inner(path: &Path) -> io::Result<UnixDatagram> { unsafe {
unsafe { let socket = UnixDatagram::unbound()?;
let socket = UnixDatagram::unbound()?; let (addr, len) = sockaddr_un(path.as_ref())?;
let (addr, len) = sockaddr_un(path)?;
cvt(libc::bind(*socket.0.as_inner(), &addr as *const _ as *const _, len as _))?; cvt(libc::bind(*socket.0.as_inner(), &addr as *const _ as *const _, len as _))?;
Ok(socket) Ok(socket)
}
} }
inner(path.as_ref())
} }
/// Creates a Unix Datagram socket which is not bound to any address. /// Creates a Unix Datagram socket which is not bound to any address.
@ -170,16 +167,12 @@ impl UnixDatagram {
/// ``` /// ```
#[stable(feature = "unix_socket", since = "1.10.0")] #[stable(feature = "unix_socket", since = "1.10.0")]
pub fn connect<P: AsRef<Path>>(&self, path: P) -> io::Result<()> { pub fn connect<P: AsRef<Path>>(&self, path: P) -> io::Result<()> {
fn inner(d: &UnixDatagram, path: &Path) -> io::Result<()> { unsafe {
unsafe { let (addr, len) = sockaddr_un(path.as_ref())?;
let (addr, len) = sockaddr_un(path)?;
cvt(libc::connect(*d.0.as_inner(), &addr as *const _ as *const _, len))?; cvt(libc::connect(*self.0.as_inner(), &addr as *const _ as *const _, len))?;
Ok(())
}
} }
inner(self, path.as_ref()) Ok(())
} }
/// Creates a new independently owned handle to the underlying socket. /// Creates a new independently owned handle to the underlying socket.
@ -430,22 +423,19 @@ impl UnixDatagram {
/// ``` /// ```
#[stable(feature = "unix_socket", since = "1.10.0")] #[stable(feature = "unix_socket", since = "1.10.0")]
pub fn send_to<P: AsRef<Path>>(&self, buf: &[u8], path: P) -> io::Result<usize> { pub fn send_to<P: AsRef<Path>>(&self, buf: &[u8], path: P) -> io::Result<usize> {
fn inner(d: &UnixDatagram, buf: &[u8], path: &Path) -> io::Result<usize> { unsafe {
unsafe { let (addr, len) = sockaddr_un(path.as_ref())?;
let (addr, len) = sockaddr_un(path)?;
let count = cvt(libc::sendto( let count = cvt(libc::sendto(
*d.0.as_inner(), *self.0.as_inner(),
buf.as_ptr() as *const _, buf.as_ptr() as *const _,
buf.len(), buf.len(),
MSG_NOSIGNAL, MSG_NOSIGNAL,
&addr as *const _ as *const _, &addr as *const _ as *const _,
len, len,
))?; ))?;
Ok(count as usize) Ok(count as usize)
}
} }
inner(self, buf, path.as_ref())
} }
/// Sends data on the socket to the socket's peer. /// Sends data on the socket to the socket's peer.

View file

@ -71,18 +71,15 @@ impl UnixListener {
/// ``` /// ```
#[stable(feature = "unix_socket", since = "1.10.0")] #[stable(feature = "unix_socket", since = "1.10.0")]
pub fn bind<P: AsRef<Path>>(path: P) -> io::Result<UnixListener> { pub fn bind<P: AsRef<Path>>(path: P) -> io::Result<UnixListener> {
fn inner(path: &Path) -> io::Result<UnixListener> { unsafe {
unsafe { let inner = Socket::new_raw(libc::AF_UNIX, libc::SOCK_STREAM)?;
let inner = Socket::new_raw(libc::AF_UNIX, libc::SOCK_STREAM)?; let (addr, len) = sockaddr_un(path.as_ref())?;
let (addr, len) = sockaddr_un(path)?;
cvt(libc::bind(*inner.as_inner(), &addr as *const _ as *const _, len as _))?; cvt(libc::bind(*inner.as_inner(), &addr as *const _ as *const _, len as _))?;
cvt(libc::listen(*inner.as_inner(), 128))?; cvt(libc::listen(*inner.as_inner(), 128))?;
Ok(UnixListener(inner)) Ok(UnixListener(inner))
}
} }
inner(path.as_ref())
} }
/// Accepts a new incoming connection to this listener. /// Accepts a new incoming connection to this listener.

View file

@ -87,16 +87,13 @@ impl UnixStream {
/// ``` /// ```
#[stable(feature = "unix_socket", since = "1.10.0")] #[stable(feature = "unix_socket", since = "1.10.0")]
pub fn connect<P: AsRef<Path>>(path: P) -> io::Result<UnixStream> { pub fn connect<P: AsRef<Path>>(path: P) -> io::Result<UnixStream> {
fn inner(path: &Path) -> io::Result<UnixStream> { unsafe {
unsafe { let inner = Socket::new_raw(libc::AF_UNIX, libc::SOCK_STREAM)?;
let inner = Socket::new_raw(libc::AF_UNIX, libc::SOCK_STREAM)?; let (addr, len) = sockaddr_un(path.as_ref())?;
let (addr, len) = sockaddr_un(path)?;
cvt(libc::connect(*inner.as_inner(), &addr as *const _ as *const _, len))?; cvt(libc::connect(*inner.as_inner(), &addr as *const _ as *const _, len))?;
Ok(UnixStream(inner)) Ok(UnixStream(inner))
}
} }
inner(path.as_ref())
} }
/// Creates an unnamed pair of connected sockets. /// Creates an unnamed pair of connected sockets.