From 3f5172bba6329a469d7ca71b09b500757f2a5337 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 17 Apr 2021 20:26:13 +0100 Subject: [PATCH] packetframe: Invent SE::GoodEof This seems to clarify things and will help in a moemnt. Signed-off-by: Ian Jackson --- src/packetframe.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/packetframe.rs b/src/packetframe.rs index 6668a7c5..2093da21 100644 --- a/src/packetframe.rs +++ b/src/packetframe.rs @@ -60,6 +60,7 @@ use ReaderState::*; #[derive(Debug,Error)] enum ReadError { + GoodEof, IO(#[from] io::Error), SE(#[from] SenderError), } @@ -171,6 +172,7 @@ impl FrameReader { while ! self.state.idle() { match self.do_read(&mut buf) { Ok(_) | Err(RE::SE(_)) => {}, + Err(RE::GoodEof) => break, Err(RE::IO(ioe)) => throw!(ioe), } } @@ -193,7 +195,7 @@ impl FrameReader { &mut q, )? { // length of chunk header - 0 => { match self.state { FrameStart => return 0, + 0 => { match self.state { FrameStart => throw!(RE::GoodEof), InFrame(0) => throw!(badeof()), _ => panic!(), } }, 1 => throw!(badeof()), @@ -246,7 +248,7 @@ impl<'r, R:Read> Read for ReadFrame<'r, R> { }; //dbgc!(fr.in_frame); match fr.do_read(buf) { - Ok(0) => { self.fr = Err(None); 0 }, + Ok(0) | Err(RE::GoodEof) => { self.fr = Err(None); 0 }, Ok(x) => x, Err(RE::IO(ioe)) => throw!(ioe), Err(RE::SE(e@ SenderError)) => { self.fr = Err(Some(e)); throw!(e) }, -- 2.30.2