fix(client): remove idle connections when read eof is found
This commit is contained in:
@@ -869,18 +869,11 @@ mod tests {
|
||||
other => panic!("unexpected frame: {:?}", other)
|
||||
}
|
||||
|
||||
// client
|
||||
// client
|
||||
let io = AsyncIo::new_buf(vec![], 1);
|
||||
let mut conn = Conn::<_, proto::Chunk, ClientTransaction>::new(io, Default::default());
|
||||
conn.state.busy();
|
||||
|
||||
match conn.poll() {
|
||||
Ok(Async::NotReady) => {},
|
||||
other => panic!("unexpected frame: {:?}", other)
|
||||
}
|
||||
|
||||
// once mid-request, returns the error
|
||||
conn.state.writing = super::Writing::KeepAlive;
|
||||
match conn.poll() {
|
||||
Err(ref err) if err.kind() == ::std::io::ErrorKind::UnexpectedEof => {},
|
||||
other => panic!("unexpected frame: {:?}", other)
|
||||
|
||||
@@ -184,11 +184,23 @@ where
|
||||
}
|
||||
|
||||
fn is_done(&self) -> bool {
|
||||
trace!(
|
||||
"is_done; read={}, write={}, should_poll={}, body={}",
|
||||
self.conn.is_read_closed(),
|
||||
self.conn.is_write_closed(),
|
||||
self.dispatch.should_poll(),
|
||||
self.body_rx.is_some(),
|
||||
);
|
||||
let read_done = self.conn.is_read_closed();
|
||||
let write_done = self.conn.is_write_closed() ||
|
||||
(!self.dispatch.should_poll() && self.body_rx.is_none());
|
||||
|
||||
read_done && write_done
|
||||
if !T::should_read_first() && read_done {
|
||||
// a client that cannot read may was well be done.
|
||||
true
|
||||
} else {
|
||||
let write_done = self.conn.is_write_closed() ||
|
||||
(!self.dispatch.should_poll() && self.body_rx.is_none());
|
||||
read_done && write_done
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user