Remove inner function in bind
, connect
and send_to
This commit is contained in:
parent
4c929a00ee
commit
1f3195a5df
3 changed files with 31 additions and 47 deletions
|
@ -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.
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue