diff --git a/crates/kumod/src/smtp_server.rs b/crates/kumod/src/smtp_server.rs index bab0c558..e5465185 100644 --- a/crates/kumod/src/smtp_server.rs +++ b/crates/kumod/src/smtp_server.rs @@ -310,6 +310,9 @@ impl SmtpServer { // Didn't find a complete line, fill up the rest of the buffer let mut data = [0u8; 1024]; let size = self.socket.as_mut().unwrap().read(&mut data).await?; + if size == 0 { + anyhow::bail!("client disconnected"); + } self.read_buffer.extend_from_slice(&data[0..size]); } } diff --git a/crates/rfc5321/src/client.rs b/crates/rfc5321/src/client.rs index a860450f..3ac0df1f 100644 --- a/crates/rfc5321/src/client.rs +++ b/crates/rfc5321/src/client.rs @@ -82,6 +82,10 @@ impl SmtpClient { // Didn't find a complete line, fill up the rest of the buffer let mut data = [0u8; MAX_LINE_LEN]; let size = self.socket.as_mut().unwrap().read(&mut data).await?; + if size == 0 { + self.socket.take(); + return Err(ClientError::NotConnected); + } self.read_buffer.extend_from_slice(&data[0..size]); } }