| @@ -66,12 +66,11 @@ where | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     pub fn set_flush_pipeline(&mut self, enabled: bool) { |     pub fn set_flush_pipeline(&mut self, enabled: bool) { | ||||||
|  |         debug_assert!(!self.write_buf.has_remaining()); | ||||||
|         self.flush_pipeline = enabled; |         self.flush_pipeline = enabled; | ||||||
|         self.write_buf.set_strategy(if enabled { |         if enabled { | ||||||
|             Strategy::Flatten |             self.set_write_strategy_flatten(); | ||||||
|         } else { |         } | ||||||
|             Strategy::Auto |  | ||||||
|         }); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     pub fn set_max_buf_size(&mut self, max: usize) { |     pub fn set_max_buf_size(&mut self, max: usize) { | ||||||
|   | |||||||
| @@ -37,6 +37,7 @@ use error::{Kind, Parse}; | |||||||
| #[derive(Clone, Debug)] | #[derive(Clone, Debug)] | ||||||
| pub struct Http { | pub struct Http { | ||||||
|     exec: Exec, |     exec: Exec, | ||||||
|  |     h1_writev: bool, | ||||||
|     mode: ConnectionMode, |     mode: ConnectionMode, | ||||||
|     keep_alive: bool, |     keep_alive: bool, | ||||||
|     max_buf_size: Option<usize>, |     max_buf_size: Option<usize>, | ||||||
| @@ -138,6 +139,7 @@ impl Http { | |||||||
|     pub fn new() -> Http { |     pub fn new() -> Http { | ||||||
|         Http { |         Http { | ||||||
|             exec: Exec::Default, |             exec: Exec::Default, | ||||||
|  |             h1_writev: true, | ||||||
|             mode: ConnectionMode::Fallback, |             mode: ConnectionMode::Fallback, | ||||||
|             keep_alive: true, |             keep_alive: true, | ||||||
|             max_buf_size: None, |             max_buf_size: None, | ||||||
| @@ -157,6 +159,20 @@ impl Http { | |||||||
|         self |         self | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /// Set whether HTTP/1 connections should try to use vectored writes, | ||||||
|  |     /// or always flatten into a single buffer. | ||||||
|  |     /// | ||||||
|  |     /// Note that setting this to false may mean more copies of body data, | ||||||
|  |     /// but may also improve performance when an IO transport doesn't | ||||||
|  |     /// support vectored writes well, such as most TLS implementations. | ||||||
|  |     /// | ||||||
|  |     /// Default is `true`. | ||||||
|  |     #[inline] | ||||||
|  |     pub fn http1_writev(&mut self, val: bool) -> &mut Self { | ||||||
|  |         self.h1_writev = val; | ||||||
|  |         self | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /// Sets whether HTTP2 is required. |     /// Sets whether HTTP2 is required. | ||||||
|     /// |     /// | ||||||
|     /// Default is false |     /// Default is false | ||||||
| @@ -264,6 +280,9 @@ impl Http { | |||||||
|                 if !self.keep_alive { |                 if !self.keep_alive { | ||||||
|                     conn.disable_keep_alive(); |                     conn.disable_keep_alive(); | ||||||
|                 } |                 } | ||||||
|  |                 if !self.h1_writev { | ||||||
|  |                     conn.set_write_strategy_flatten(); | ||||||
|  |                 } | ||||||
|                 conn.set_flush_pipeline(self.pipeline_flush); |                 conn.set_flush_pipeline(self.pipeline_flush); | ||||||
|                 if let Some(max) = self.max_buf_size { |                 if let Some(max) = self.max_buf_size { | ||||||
|                     conn.set_max_buf_size(max); |                     conn.set_max_buf_size(max); | ||||||
|   | |||||||
| @@ -175,6 +175,21 @@ impl<I> Builder<I> { | |||||||
|         self |         self | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /// Set whether HTTP/1 connections should try to use vectored writes, | ||||||
|  |     /// or always flatten into a single buffer. | ||||||
|  |     /// | ||||||
|  |     /// # Note | ||||||
|  |     /// | ||||||
|  |     /// Setting this to `false` may mean more copies of body data, | ||||||
|  |     /// but may also improve performance when an IO transport doesn't | ||||||
|  |     /// support vectored writes well, such as most TLS implementations. | ||||||
|  |     /// | ||||||
|  |     /// Default is `true`. | ||||||
|  |     pub fn http1_writev(mut self, val: bool) -> Self { | ||||||
|  |         self.protocol.http1_writev(val); | ||||||
|  |         self | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /// Sets whether HTTP/2 is required. |     /// Sets whether HTTP/2 is required. | ||||||
|     /// |     /// | ||||||
|     /// Default is `false`. |     /// Default is `false`. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user