Merge pull request #545 from hyperium/issue-543

fix(client): don't close stream until EOF
This commit is contained in:
Sean McArthur
2015-05-23 17:22:38 -07:00
2 changed files with 22 additions and 5 deletions

View File

@@ -43,9 +43,6 @@ impl Response {
debug!("version={:?}, status={:?}", head.version, status);
debug!("headers={:?}", headers);
if !http::should_keep_alive(head.version, &headers) {
try!(stream.get_mut().close(Shutdown::Write));
}
let body = if headers.has::<TransferEncoding>() {
match headers.get::<TransferEncoding>() {
@@ -97,7 +94,15 @@ impl Response {
impl Read for Response {
#[inline]
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
self.body.read(buf)
let count = try!(self.body.read(buf));
if count == 0 {
if !http::should_keep_alive(self.version, &self.headers) {
try!(self.body.get_mut().get_mut().close(Shutdown::Both));
}
}
Ok(count)
}
}

View File

@@ -59,6 +59,16 @@ impl<R: Read> HttpReader<R> {
EmptyReader(r) => r,
}
}
/// Gets a mutable reference to the underlying Reader.
pub fn get_mut(&mut self) -> &mut R {
match *self {
SizedReader(ref mut r, _) => r,
ChunkedReader(ref mut r, _) => r,
EofReader(ref mut r) => r,
EmptyReader(ref mut r) => r,
}
}
}
impl<R> fmt::Debug for HttpReader<R> {
@@ -121,7 +131,9 @@ impl<R: Read> Read for HttpReader<R> {
Ok(count as usize)
},
EofReader(ref mut body) => {
body.read(buf)
let r = body.read(buf);
trace!("eofread: {:?}", r);
r
},
EmptyReader(_) => Ok(0)
}