diff --git a/easytier/src/tunnel/mpsc.rs b/easytier/src/tunnel/mpsc.rs index fb4f68c9..32c2dcfa 100644 --- a/easytier/src/tunnel/mpsc.rs +++ b/easytier/src/tunnel/mpsc.rs @@ -20,8 +20,14 @@ pub struct MpscTunnelSender(Sender); impl MpscTunnelSender { pub async fn send(&self, item: ZCPacket) -> Result<(), TunnelError> { - self.0.send(item).await.with_context(|| "send error")?; - Ok(()) + match self.0.try_send(item) { + Ok(()) => Ok(()), + Err(TrySendError::Full(item)) => { + self.0.send(item).await.with_context(|| "send error")?; + Ok(()) + } + Err(TrySendError::Closed(_)) => Err(TunnelError::Shutdown), + } } pub fn try_send(&self, item: ZCPacket) -> Result<(), TunnelError> {