From dba4db694ce013ea0fb3efbb464dd6716560733f Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Sat, 2 Feb 2019 13:58:19 -0700 Subject: [PATCH] Use WouldBlock with network file --- src/smolnetd/scheme/mod.rs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/smolnetd/scheme/mod.rs b/src/smolnetd/scheme/mod.rs index 517f9c0541..d09051a584 100644 --- a/src/smolnetd/scheme/mod.rs +++ b/src/smolnetd/scheme/mod.rs @@ -8,7 +8,7 @@ use smoltcp::wire::{EthernetAddress, IpAddress, IpCidr, IpEndpoint, Ipv4Address} use std::cell::RefCell; use std::collections::{BTreeMap, VecDeque}; use std::fs::File; -use std::io::{Read, Write}; +use std::io::{self, Read, Write}; use std::mem::size_of; use std::rc::Rc; use std::str::FromStr; @@ -216,13 +216,15 @@ impl Smolnetd { let mut total_frames = 0; loop { let mut buffer = self.buffer_pool.borrow_mut().get_buffer(); - let count = self.network_file - .borrow_mut() - .read(&mut buffer) - .map_err(|e| Error::from_io_error(e, "Failed to read from network file"))?; - if count == 0 { - break; - } + let count = match self.network_file.borrow_mut().read(&mut buffer) { + Ok(count) => count, + Err(err) => match err.kind() { + io::ErrorKind::WouldBlock => break, + _ => return Err( + Error::from_io_error(err, "Failed to read from network file") + ) + } + }; buffer.resize(count); self.input_queue.borrow_mut().push_back(buffer); total_frames += 1;