Struct tokio::net::UnixDatagram
source · [−]pub struct UnixDatagram { /* private fields */ }
Expand description
An I/O object representing a Unix datagram socket.
Implementations
sourceimpl UnixDatagram
impl UnixDatagram
sourcepub fn bind<P>(path: P) -> Result<UnixDatagram> where
P: AsRef<Path>,
pub fn bind<P>(path: P) -> Result<UnixDatagram> where
P: AsRef<Path>,
Creates a new UnixDatagram
bound to the specified path.
sourcepub fn pair() -> Result<(UnixDatagram, UnixDatagram)>
pub fn pair() -> Result<(UnixDatagram, UnixDatagram)>
Creates an unnamed pair of connected sockets.
This function will create a pair of interconnected Unix sockets for communicating back and forth between one another. Each socket will be associated with the default event loop’s handle.
sourcepub fn from_std(datagram: UnixDatagram) -> Result<UnixDatagram>
pub fn from_std(datagram: UnixDatagram) -> Result<UnixDatagram>
Consumes a UnixDatagram
in the standard library and returns a
nonblocking UnixDatagram
from this crate.
The returned datagram will be associated with the given event loop
specified by handle
and is ready to perform I/O.
Panics
This function panics if thread-local runtime is not set.
The runtime is usually set implicitly when this function is called
from a future driven by a tokio runtime, otherwise runtime can be set
explicitly with Handle::enter
function.
sourcepub fn unbound() -> Result<UnixDatagram>
pub fn unbound() -> Result<UnixDatagram>
Creates a new UnixDatagram
which is not bound to any address.
sourcepub fn connect<P: AsRef<Path>>(&self, path: P) -> Result<()>
pub fn connect<P: AsRef<Path>>(&self, path: P) -> Result<()>
Connects the socket to the specified address.
The send
method may be used to send data to the specified address.
recv
and recv_from
will only receive data from that address.
sourcepub async fn send(&mut self, buf: &[u8]) -> Result<usize>
pub async fn send(&mut self, buf: &[u8]) -> Result<usize>
Sends data on the socket to the socket’s peer.
sourcepub fn try_send(&mut self, buf: &[u8]) -> Result<usize>
pub fn try_send(&mut self, buf: &[u8]) -> Result<usize>
Try to send a datagram to the peer without waiting.
use tokio::net::UnixDatagram;
let bytes = b"bytes";
// We use a socket pair so that they are assigned
// each other as a peer.
let (mut first, mut second) = UnixDatagram::pair()?;
let size = first.try_send(bytes)?;
assert_eq!(size, bytes.len());
let mut buffer = vec![0u8; 24];
let size = second.try_recv(&mut buffer)?;
let dgram = &buffer.as_slice()[..size];
assert_eq!(dgram, bytes);
sourcepub fn try_send_to<P>(&mut self, buf: &[u8], target: P) -> Result<usize> where
P: AsRef<Path>,
pub fn try_send_to<P>(&mut self, buf: &[u8], target: P) -> Result<usize> where
P: AsRef<Path>,
Try to send a datagram to the peer without waiting.
use {
tokio::net::UnixDatagram,
tempfile::tempdir,
};
let bytes = b"bytes";
// We use a temporary directory so that the socket
// files left by the bound sockets will get cleaned up.
let tmp = tempdir().unwrap();
let server_path = tmp.path().join("server");
let mut server = UnixDatagram::bind(&server_path)?;
let client_path = tmp.path().join("client");
let mut client = UnixDatagram::bind(&client_path)?;
let size = client.try_send_to(bytes, &server_path)?;
assert_eq!(size, bytes.len());
let mut buffer = vec![0u8; 24];
let (size, addr) = server.try_recv_from(&mut buffer)?;
let dgram = &buffer.as_slice()[..size];
assert_eq!(dgram, bytes);
assert_eq!(addr.as_pathname().unwrap(), &client_path);
sourcepub fn try_recv(&mut self, buf: &mut [u8]) -> Result<usize>
pub fn try_recv(&mut self, buf: &mut [u8]) -> Result<usize>
Try to receive a datagram from the peer without waiting.
sourcepub async fn send_to<P>(&mut self, buf: &[u8], target: P) -> Result<usize> where
P: AsRef<Path> + Unpin,
pub async fn send_to<P>(&mut self, buf: &[u8], target: P) -> Result<usize> where
P: AsRef<Path> + Unpin,
Sends data on the socket to the specified address.
sourcepub async fn recv_from(&mut self, buf: &mut [u8]) -> Result<(usize, SocketAddr)>
pub async fn recv_from(&mut self, buf: &mut [u8]) -> Result<(usize, SocketAddr)>
Receives data from the socket.
sourcepub fn try_recv_from(&mut self, buf: &mut [u8]) -> Result<(usize, SocketAddr)>
pub fn try_recv_from(&mut self, buf: &mut [u8]) -> Result<(usize, SocketAddr)>
Try to receive data from the socket without waiting.
sourcepub fn local_addr(&self) -> Result<SocketAddr>
pub fn local_addr(&self) -> Result<SocketAddr>
Returns the local address that this socket is bound to.
sourcepub fn peer_addr(&self) -> Result<SocketAddr>
pub fn peer_addr(&self) -> Result<SocketAddr>
Returns the address of this socket’s peer.
The connect
method will connect the socket to a peer.
sourcepub fn take_error(&self) -> Result<Option<Error>>
pub fn take_error(&self) -> Result<Option<Error>>
Returns the value of the SO_ERROR
option.
sourcepub fn shutdown(&self, how: Shutdown) -> Result<()>
pub fn shutdown(&self, how: Shutdown) -> Result<()>
Shuts down the read, write, or both halves of this connection.
This function will cause all pending and future I/O calls on the
specified portions to immediately return with an appropriate value
(see the documentation of Shutdown
).
sourcepub fn split<'a>(&'a mut self) -> (RecvHalf<'a>, SendHalf<'a>)
pub fn split<'a>(&'a mut self) -> (RecvHalf<'a>, SendHalf<'a>)
Split a UnixDatagram
into a receive half and a send half, which can be used
to receive and send the datagram concurrently.
This method is more efficient than into_split
, but the halves cannot
be moved into independently spawned tasks.
sourcepub fn into_split(self) -> (OwnedRecvHalf, OwnedSendHalf)
pub fn into_split(self) -> (OwnedRecvHalf, OwnedSendHalf)
Split a UnixDatagram
into a receive half and a send half, which can be used
to receive and send the datagram concurrently.
Unlike split
, the owned halves can be moved to separate tasks,
however this comes at the cost of a heap allocation.
Note: Dropping the write half will shut down the write half of the
datagram. This is equivalent to calling shutdown(Write)
.
Trait Implementations
sourceimpl AsRawFd for UnixDatagram
impl AsRawFd for UnixDatagram
sourceimpl AsRef<UnixDatagram> for RecvHalf<'_>
impl AsRef<UnixDatagram> for RecvHalf<'_>
sourcefn as_ref(&self) -> &UnixDatagram
fn as_ref(&self) -> &UnixDatagram
Performs the conversion.
sourceimpl AsRef<UnixDatagram> for SendHalf<'_>
impl AsRef<UnixDatagram> for SendHalf<'_>
sourcefn as_ref(&self) -> &UnixDatagram
fn as_ref(&self) -> &UnixDatagram
Performs the conversion.
sourceimpl AsRef<UnixDatagram> for OwnedSendHalf
impl AsRef<UnixDatagram> for OwnedSendHalf
sourcefn as_ref(&self) -> &UnixDatagram
fn as_ref(&self) -> &UnixDatagram
Performs the conversion.
sourceimpl AsRef<UnixDatagram> for OwnedRecvHalf
impl AsRef<UnixDatagram> for OwnedRecvHalf
sourcefn as_ref(&self) -> &UnixDatagram
fn as_ref(&self) -> &UnixDatagram
Performs the conversion.
sourceimpl Debug for UnixDatagram
impl Debug for UnixDatagram
sourceimpl TryFrom<UnixDatagram> for UnixDatagram
impl TryFrom<UnixDatagram> for UnixDatagram
sourcefn try_from(value: UnixDatagram) -> Result<Self, Self::Error>
fn try_from(value: UnixDatagram) -> Result<Self, Self::Error>
Consumes value, returning the mio I/O object.
See PollEvented::into_inner
for more details about
resource deregistration that happens during the call.
sourceimpl TryFrom<UnixDatagram> for UnixDatagram
impl TryFrom<UnixDatagram> for UnixDatagram
sourcefn try_from(stream: UnixDatagram) -> Result<Self, Self::Error>
fn try_from(stream: UnixDatagram) -> Result<Self, Self::Error>
Consumes stream, returning the tokio I/O object.
This is equivalent to
UnixDatagram::from_std(stream)
.
Auto Trait Implementations
impl !RefUnwindSafe for UnixDatagram
impl Send for UnixDatagram
impl Sync for UnixDatagram
impl Unpin for UnixDatagram
impl !UnwindSafe for UnixDatagram
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more