pub struct Async { /* private fields */ }
Expand description
A wrapper around Iface
for use in connection with tokio.
This turns the synchronous Iface
into an asynchronous Sink + Stream
of packets.
Implementations§
source§impl Async
impl Async
sourcepub fn new(iface: Iface, handle: &Handle) -> Result<Self>
pub fn new(iface: Iface, handle: &Handle) -> Result<Self>
Consumes an Iface
and wraps it in a new Async
.
Parameters
iface
: The created interface to wrap. It gets consumed.handle
: The handle to tokio’sCore
to run on.
Errors
This fails with an error in case of low-level OS errors (they shouldn’t usually happen).
Examples
let iface = Iface::new("mytun%d", Mode::Tun).unwrap();
let name = iface.name().to_owned();
// Bring the interface up by `ip addr add IP dev $name; ip link set up dev $name`
let core = Core::new().unwrap();
let async = Async::new(iface, &core.handle()).unwrap();
let (sink, stream) = async.split();
sourcepub fn set_recv_bufsize(&mut self, bufsize: usize)
pub fn set_recv_bufsize(&mut self, bufsize: usize)
Sets the receive buffer size.
When receiving a packet, a buffer of this size is allocated and the packet read into it. This configures the size of the buffer.
This needs to be called when the interface’s MTU is changed from the default 1500. The default should be enough otherwise.
Trait Implementations§
source§impl Sink for Async
impl Sink for Async
source§fn start_send(
&mut self,
item: Self::SinkItem
) -> StartSend<Self::SinkItem, Self::SinkError>
fn start_send( &mut self, item: Self::SinkItem ) -> StartSend<Self::SinkItem, Self::SinkError>
Begin the process of sending a value to the sink. Read more
source§fn poll_complete(&mut self) -> FPoll<(), Self::SinkError>
fn poll_complete(&mut self) -> FPoll<(), Self::SinkError>
Flush all output from this sink, if necessary. Read more
source§fn close(&mut self) -> Result<Async<()>, Self::SinkError>
fn close(&mut self) -> Result<Async<()>, Self::SinkError>
A method to indicate that no more values will ever be pushed into this
sink. Read more
source§fn wait(self) -> Wait<Self>where
Self: Sized,
fn wait(self) -> Wait<Self>where Self: Sized,
Creates a new object which will produce a synchronous sink. Read more
source§fn with<U, F, Fut>(self, f: F) -> With<Self, U, F, Fut>where
F: FnMut(U) -> Fut,
Fut: IntoFuture<Item = Self::SinkItem>,
<Fut as IntoFuture>::Error: From<Self::SinkError>,
Self: Sized,
fn with<U, F, Fut>(self, f: F) -> With<Self, U, F, Fut>where F: FnMut(U) -> Fut, Fut: IntoFuture<Item = Self::SinkItem>, <Fut as IntoFuture>::Error: From<Self::SinkError>, Self: Sized,
Composes a function in front of the sink. Read more
source§fn with_flat_map<U, F, St>(self, f: F) -> WithFlatMap<Self, U, F, St>where
F: FnMut(U) -> St,
St: Stream<Item = Self::SinkItem, Error = Self::SinkError>,
Self: Sized,
fn with_flat_map<U, F, St>(self, f: F) -> WithFlatMap<Self, U, F, St>where F: FnMut(U) -> St, St: Stream<Item = Self::SinkItem, Error = Self::SinkError>, Self: Sized,
Composes a function in front of the sink. Read more
source§fn sink_map_err<F, E>(self, f: F) -> SinkMapErr<Self, F>where
F: FnOnce(Self::SinkError) -> E,
Self: Sized,
fn sink_map_err<F, E>(self, f: F) -> SinkMapErr<Self, F>where F: FnOnce(Self::SinkError) -> E, Self: Sized,
Transforms the error returned by the sink.
source§fn sink_from_err<E>(self) -> SinkFromErr<Self, E>where
E: From<Self::SinkError>,
Self: Sized,
fn sink_from_err<E>(self) -> SinkFromErr<Self, E>where E: From<Self::SinkError>, Self: Sized,
Map this sink’s error to any error implementing
From
for this sink’s
Error
, returning a new sink. Read moresource§fn buffer(self, amt: usize) -> Buffer<Self>where
Self: Sized,
fn buffer(self, amt: usize) -> Buffer<Self>where Self: Sized,
Adds a fixed-size buffer to the current sink. Read more
source§fn fanout<S>(self, other: S) -> Fanout<Self, S>where
Self: Sized,
Self::SinkItem: Clone,
S: Sink<SinkItem = Self::SinkItem, SinkError = Self::SinkError>,
fn fanout<S>(self, other: S) -> Fanout<Self, S>where Self: Sized, Self::SinkItem: Clone, S: Sink<SinkItem = Self::SinkItem, SinkError = Self::SinkError>,
Fanout items to multiple sinks. Read more
source§fn flush(self) -> Flush<Self>where
Self: Sized,
fn flush(self) -> Flush<Self>where Self: Sized,
A future that completes when the sink has finished processing all
pending requests. Read more
source§impl Stream for Async
impl Stream for Async
source§fn poll(&mut self) -> FPoll<Option<Self::Item>, Self::Error>
fn poll(&mut self) -> FPoll<Option<Self::Item>, Self::Error>
Attempt to pull out the next value of this stream, returning
None
if
the stream is finished. Read moresource§fn wait(self) -> Wait<Self>where
Self: Sized,
fn wait(self) -> Wait<Self>where Self: Sized,
Creates an iterator which blocks the current thread until each item of
this stream is resolved. Read more
source§fn into_future(self) -> StreamFuture<Self>where
Self: Sized,
fn into_future(self) -> StreamFuture<Self>where Self: Sized,
Converts this stream into a
Future
. Read moresource§fn map_err<U, F>(self, f: F) -> MapErr<Self, F>where
F: FnMut(Self::Error) -> U,
Self: Sized,
fn map_err<U, F>(self, f: F) -> MapErr<Self, F>where F: FnMut(Self::Error) -> U, Self: Sized,
source§fn filter<F>(self, f: F) -> Filter<Self, F>where
F: FnMut(&Self::Item) -> bool,
Self: Sized,
fn filter<F>(self, f: F) -> Filter<Self, F>where F: FnMut(&Self::Item) -> bool, Self: Sized,
Filters the values produced by this stream according to the provided
predicate. Read more
source§fn filter_map<F, B>(self, f: F) -> FilterMap<Self, F>where
F: FnMut(Self::Item) -> Option<B>,
Self: Sized,
fn filter_map<F, B>(self, f: F) -> FilterMap<Self, F>where F: FnMut(Self::Item) -> Option<B>, Self: Sized,
Filters the values produced by this stream while simultaneously mapping
them to a different type. Read more
source§fn then<F, U>(self, f: F) -> Then<Self, F, U>where
F: FnMut(Result<Self::Item, Self::Error>) -> U,
U: IntoFuture,
Self: Sized,
fn then<F, U>(self, f: F) -> Then<Self, F, U>where F: FnMut(Result<Self::Item, Self::Error>) -> U, U: IntoFuture, Self: Sized,
Chain on a computation for when a value is ready, passing the resulting
item to the provided closure
f
. Read moresource§fn and_then<F, U>(self, f: F) -> AndThen<Self, F, U>where
F: FnMut(Self::Item) -> U,
U: IntoFuture<Error = Self::Error>,
Self: Sized,
fn and_then<F, U>(self, f: F) -> AndThen<Self, F, U>where F: FnMut(Self::Item) -> U, U: IntoFuture<Error = Self::Error>, Self: Sized,
Chain on a computation for when a value is ready, passing the successful
results to the provided closure
f
. Read moresource§fn or_else<F, U>(self, f: F) -> OrElse<Self, F, U>where
F: FnMut(Self::Error) -> U,
U: IntoFuture<Item = Self::Item>,
Self: Sized,
fn or_else<F, U>(self, f: F) -> OrElse<Self, F, U>where F: FnMut(Self::Error) -> U, U: IntoFuture<Item = Self::Item>, Self: Sized,
Chain on a computation for when an error happens, passing the
erroneous result to the provided closure
f
. Read moresource§fn collect(self) -> Collect<Self>where
Self: Sized,
fn collect(self) -> Collect<Self>where Self: Sized,
Collect all of the values of this stream into a vector, returning a
future representing the result of that computation. Read more
source§fn concat2(self) -> Concat2<Self>where
Self: Sized,
Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,
fn concat2(self) -> Concat2<Self>where Self: Sized, Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,
Concatenate all results of a stream into a single extendable
destination, returning a future representing the end result. Read more
source§fn concat(self) -> Concat<Self>where
Self: Sized,
Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator,
fn concat(self) -> Concat<Self>where Self: Sized, Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator,
👎Deprecated since 0.1.14: please use
Stream::concat2
insteadConcatenate all results of a stream into a single extendable
destination, returning a future representing the end result. Read more
source§fn fold<F, T, Fut>(self, init: T, f: F) -> Fold<Self, F, Fut, T>where
F: FnMut(T, Self::Item) -> Fut,
Fut: IntoFuture<Item = T>,
Self::Error: From<<Fut as IntoFuture>::Error>,
Self: Sized,
fn fold<F, T, Fut>(self, init: T, f: F) -> Fold<Self, F, Fut, T>where F: FnMut(T, Self::Item) -> Fut, Fut: IntoFuture<Item = T>, Self::Error: From<<Fut as IntoFuture>::Error>, Self: Sized,
Execute an accumulating computation over a stream, collecting all the
values into one final result. Read more
source§fn skip_while<P, R>(self, pred: P) -> SkipWhile<Self, P, R>where
P: FnMut(&Self::Item) -> R,
R: IntoFuture<Item = bool, Error = Self::Error>,
Self: Sized,
fn skip_while<P, R>(self, pred: P) -> SkipWhile<Self, P, R>where P: FnMut(&Self::Item) -> R, R: IntoFuture<Item = bool, Error = Self::Error>, Self: Sized,
Skip elements on this stream while the predicate provided resolves to
true
. Read moresource§fn take_while<P, R>(self, pred: P) -> TakeWhile<Self, P, R>where
P: FnMut(&Self::Item) -> R,
R: IntoFuture<Item = bool, Error = Self::Error>,
Self: Sized,
fn take_while<P, R>(self, pred: P) -> TakeWhile<Self, P, R>where P: FnMut(&Self::Item) -> R, R: IntoFuture<Item = bool, Error = Self::Error>, Self: Sized,
Take elements from this stream while the predicate provided resolves to
true
. Read moresource§fn for_each<F, U>(self, f: F) -> ForEach<Self, F, U>where
F: FnMut(Self::Item) -> U,
U: IntoFuture<Item = (), Error = Self::Error>,
Self: Sized,
fn for_each<F, U>(self, f: F) -> ForEach<Self, F, U>where F: FnMut(Self::Item) -> U, U: IntoFuture<Item = (), Error = Self::Error>, Self: Sized,
Runs this stream to completion, executing the provided closure for each
element on the stream. Read more
source§fn from_err<E>(self) -> FromErr<Self, E>where
E: From<Self::Error>,
Self: Sized,
fn from_err<E>(self) -> FromErr<Self, E>where E: From<Self::Error>, Self: Sized,
Map this stream’s error to any error implementing
From
for
this stream’s Error
, returning a new stream. Read moresource§fn take(self, amt: u64) -> Take<Self>where
Self: Sized,
fn take(self, amt: u64) -> Take<Self>where Self: Sized,
Creates a new stream of at most
amt
items of the underlying stream. Read moresource§fn skip(self, amt: u64) -> Skip<Self>where
Self: Sized,
fn skip(self, amt: u64) -> Skip<Self>where Self: Sized,
Creates a new stream which skips
amt
items of the underlying stream. Read moresource§fn fuse(self) -> Fuse<Self>where
Self: Sized,
fn fuse(self) -> Fuse<Self>where Self: Sized,
Fuse a stream such that
poll
will never again be called once it has
finished. Read moresource§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere Self: Sized,
Borrows a stream, rather than consuming it. Read more
source§fn merge<S>(self, other: S) -> Merge<Self, S>where
S: Stream<Error = Self::Error>,
Self: Sized,
fn merge<S>(self, other: S) -> Merge<Self, S>where S: Stream<Error = Self::Error>, Self: Sized,
👎Deprecated: functionality provided by
select
nowAn adapter for merging the output of two streams. Read more
source§fn zip<S>(self, other: S) -> Zip<Self, S>where
S: Stream<Error = Self::Error>,
Self: Sized,
fn zip<S>(self, other: S) -> Zip<Self, S>where S: Stream<Error = Self::Error>, Self: Sized,
An adapter for zipping two streams together. Read more
source§fn chain<S>(self, other: S) -> Chain<Self, S>where
S: Stream<Item = Self::Item, Error = Self::Error>,
Self: Sized,
fn chain<S>(self, other: S) -> Chain<Self, S>where S: Stream<Item = Self::Item, Error = Self::Error>, Self: Sized,
Adapter for chaining two stream. Read more
source§fn peekable(self) -> Peekable<Self>where
Self: Sized,
fn peekable(self) -> Peekable<Self>where Self: Sized,
Creates a new stream which exposes a
peek
method. Read moresource§fn chunks(self, capacity: usize) -> Chunks<Self>where
Self: Sized,
fn chunks(self, capacity: usize) -> Chunks<Self>where Self: Sized,
An adaptor for chunking up items of the stream inside a vector. Read more
source§fn select<S>(self, other: S) -> Select<Self, S>where
S: Stream<Item = Self::Item, Error = Self::Error>,
Self: Sized,
fn select<S>(self, other: S) -> Select<Self, S>where S: Stream<Item = Self::Item, Error = Self::Error>, Self: Sized,
Creates a stream that selects the next element from either this stream
or the provided one, whichever is ready first. Read more
source§fn forward<S>(self, sink: S) -> Forward<Self, S>where
S: Sink<SinkItem = Self::Item>,
Self::Error: From<<S as Sink>::SinkError>,
Self: Sized,
fn forward<S>(self, sink: S) -> Forward<Self, S>where S: Sink<SinkItem = Self::Item>, Self::Error: From<<S as Sink>::SinkError>, Self: Sized,
A future that completes after the given stream has been fully processed
into the sink, including flushing. Read more
source§fn inspect<F>(self, f: F) -> Inspect<Self, F>where
F: FnMut(&Self::Item),
Self: Sized,
fn inspect<F>(self, f: F) -> Inspect<Self, F>where F: FnMut(&Self::Item), Self: Sized,
Do something with each item of this stream, afterwards passing it on. Read more
source§fn inspect_err<F>(self, f: F) -> InspectErr<Self, F>where
F: FnMut(&Self::Error),
Self: Sized,
fn inspect_err<F>(self, f: F) -> InspectErr<Self, F>where F: FnMut(&Self::Error), Self: Sized,
Do something with the error of this stream, afterwards passing it on. Read more
Auto Trait Implementations§
impl !RefUnwindSafe for Async
impl Send for Async
impl Sync for Async
impl Unpin for Async
impl !UnwindSafe for Async
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more