fix(client): improve keep-alive of bodyless Responses
This commit is contained in:
		| @@ -47,9 +47,9 @@ impl Response { | |||||||
|             version: version, |             version: version, | ||||||
|             headers: headers, |             headers: headers, | ||||||
|             url: url, |             url: url, | ||||||
|             message: message, |  | ||||||
|             status_raw: raw_status, |             status_raw: raw_status, | ||||||
|             is_drained: false, |             is_drained: !message.has_body(), | ||||||
|  |             message: message, | ||||||
|         }) |         }) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -203,6 +203,13 @@ impl HttpMessage for Http11Message { | |||||||
|         }) |         }) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     fn has_body(&self) -> bool { | ||||||
|  |         match self.reader { | ||||||
|  |             Some(EmptyReader(..)) => false, | ||||||
|  |             _ => true | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     #[cfg(feature = "timeouts")] |     #[cfg(feature = "timeouts")] | ||||||
|     #[inline] |     #[inline] | ||||||
|     fn set_read_timeout(&self, dur: Option<Duration>) -> io::Result<()> { |     fn set_read_timeout(&self, dur: Option<Duration>) -> io::Result<()> { | ||||||
|   | |||||||
| @@ -400,6 +400,10 @@ impl<S> HttpMessage for Http2Message<S> where S: CloneableStream { | |||||||
|         Ok(head) |         Ok(head) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     fn has_body(&self) -> bool { | ||||||
|  |         true | ||||||
|  |     } | ||||||
|  |  | ||||||
|     #[cfg(feature = "timeouts")] |     #[cfg(feature = "timeouts")] | ||||||
|     #[inline] |     #[inline] | ||||||
|     fn set_read_timeout(&self, _dur: Option<Duration>) -> io::Result<()> { |     fn set_read_timeout(&self, _dur: Option<Duration>) -> io::Result<()> { | ||||||
|   | |||||||
| @@ -72,6 +72,8 @@ pub trait HttpMessage: Write + Read + Send + Any + Typeable + Debug { | |||||||
|     fn set_write_timeout(&self, dur: Option<Duration>) -> io::Result<()>; |     fn set_write_timeout(&self, dur: Option<Duration>) -> io::Result<()>; | ||||||
|     /// Closes the underlying HTTP connection. |     /// Closes the underlying HTTP connection. | ||||||
|     fn close_connection(&mut self) -> ::Result<()>; |     fn close_connection(&mut self) -> ::Result<()>; | ||||||
|  |     /// Returns whether the incoming message has a body. | ||||||
|  |     fn has_body(&self) -> bool; | ||||||
| } | } | ||||||
|  |  | ||||||
| impl HttpMessage { | impl HttpMessage { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user