Add tcp_keepalive option for ClientBuilder (#1070)
This commit is contained in:
		
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							6705b90a15
						
					
				
				
					commit
					00fb43b650
				
			| @@ -80,6 +80,7 @@ struct Config { | ||||
|     connection_verbose: bool, | ||||
|     pool_idle_timeout: Option<Duration>, | ||||
|     pool_max_idle_per_host: usize, | ||||
|     tcp_keepalive: Option<Duration>, | ||||
|     #[cfg(feature = "__tls")] | ||||
|     identity: Option<Identity>, | ||||
|     proxies: Vec<Proxy>, | ||||
| @@ -131,6 +132,7 @@ impl ClientBuilder { | ||||
|                 connection_verbose: false, | ||||
|                 pool_idle_timeout: Some(Duration::from_secs(90)), | ||||
|                 pool_max_idle_per_host: std::usize::MAX, | ||||
|                 tcp_keepalive: Some(Duration::from_secs(60)), | ||||
|                 proxies: Vec::new(), | ||||
|                 auto_sys_proxy: true, | ||||
|                 redirect_policy: redirect::Policy::default(), | ||||
| @@ -316,6 +318,7 @@ impl ClientBuilder { | ||||
|  | ||||
|         builder.pool_idle_timeout(config.pool_idle_timeout); | ||||
|         builder.pool_max_idle_per_host(config.pool_max_idle_per_host); | ||||
|         connector.set_keepalive(config.tcp_keepalive); | ||||
|  | ||||
|         if config.http1_title_case_headers { | ||||
|             builder.http1_title_case_headers(true); | ||||
| @@ -712,6 +715,19 @@ impl ClientBuilder { | ||||
|         self | ||||
|     } | ||||
|  | ||||
|     /// Set that all sockets have `SO_KEEPALIVE` set with the supplied duration. | ||||
|     /// | ||||
|     /// If `None`, the option will not be set. | ||||
|     /// | ||||
|     /// Default is 60 seconds. | ||||
|     pub fn tcp_keepalive<D>(mut self, val: D) -> ClientBuilder | ||||
|         where | ||||
|             D: Into<Option<Duration>>, | ||||
|     { | ||||
|         self.config.tcp_keepalive = val.into(); | ||||
|         self | ||||
|     } | ||||
|  | ||||
|     // TLS options | ||||
|  | ||||
|     /// Add a custom root certificate. | ||||
|   | ||||
| @@ -71,6 +71,7 @@ impl_http_connector! { | ||||
|     fn set_local_address(&mut self, addr: Option<IpAddr>); | ||||
|     fn enforce_http(&mut self, is_enforced: bool); | ||||
|     fn set_nodelay(&mut self, nodelay: bool); | ||||
|     fn set_keepalive(&mut self, dur: Option<Duration>); | ||||
| } | ||||
|  | ||||
| impl Service<Uri> for HttpConnector { | ||||
| @@ -474,6 +475,17 @@ impl Connector { | ||||
|  | ||||
|         self.connect_with_maybe_proxy(proxy_dst, true).await | ||||
|     } | ||||
|  | ||||
|     pub fn set_keepalive(&mut self, dur: Option<Duration>) { | ||||
|         match &mut self.inner { | ||||
|             #[cfg(feature = "default-tls")] | ||||
|             Inner::DefaultTls(http, _tls) => http.set_keepalive(dur), | ||||
|             #[cfg(feature = "rustls-tls")] | ||||
|             Inner::RustlsTls { http, .. } => http.set_keepalive(dur), | ||||
|             #[cfg(not(feature = "__tls"))] | ||||
|             Inner::Http(http) => http.set_keepalive(dur), | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| fn into_uri(scheme: Scheme, host: Authority) -> Uri { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user