From 19aabd5e666a1e03a8c9e4c830e15969e667c8fb Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Sun, 17 Feb 2019 20:19:35 -0700 Subject: [PATCH] Fix hangs when a tcp stream is closed --- src/smolnetd/scheme/tcp.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/smolnetd/scheme/tcp.rs b/src/smolnetd/scheme/tcp.rs index 20f69b9f56..bc18754618 100644 --- a/src/smolnetd/scheme/tcp.rs +++ b/src/smolnetd/scheme/tcp.rs @@ -122,7 +122,7 @@ impl<'a> SchemeSocket for TcpSocket<'a> { } else if file.flags & syscall::O_NONBLOCK == syscall::O_NONBLOCK { Err(SyscallError::new(syscall::EAGAIN)) } else { - Ok(None) // internally scheduled to re-read + Ok(None) // internally scheduled to re-write } } @@ -136,6 +136,8 @@ impl<'a> SchemeSocket for TcpSocket<'a> { } else if self.can_recv() { let length = self.recv_slice(buf).expect("Can't receive slice"); Ok(Some(length)) + } else if !self.may_recv() { + Ok(Some(0)) } else if file.flags & syscall::O_NONBLOCK == syscall::O_NONBLOCK { Err(SyscallError::new(syscall::EAGAIN)) } else {