cleanup: Interval,
timeout: Pin<Box<Sleep>>,
output: mpsc::UnboundedSender<Result<Pkt<'static>>>,
+ closed: bool,
}
impl<S: UdpSender, R: UdpReceiver> Worker<S, R> {
ping: interval(Duration::from_secs(PING_TIMEOUT)),
cleanup: interval(Duration::from_secs(TIMEOUT)),
timeout: Box::pin(sleep(Duration::from_secs(TIMEOUT))),
+ closed: false,
chans: std::array::from_fn(|_| RecvChan {
packets: (0..REL_BUFFER).map(|_| None).collect(),
seqnum: INIT_SEQNUM,
pub async fn run(mut self) {
use Error::*;
- loop {
+ while !self.closed {
tokio::select! {
_ = self.close.changed() => {
self.sender
}
CtlType::Ping => {}
CtlType::Disco => {
+ self.closed = true;
return Err(RemoteDisco(false));
}
},