Add tcp no_delay option (#465)

* Add tcp no_delay option
This commit is contained in:
Daniel
2022-01-06 23:22:33 +01:00
committed by GitHub
parent 007ce44ea7
commit 140aa5901f
2 changed files with 24 additions and 0 deletions

View File

@@ -54,6 +54,7 @@ pub(crate) struct AgentConfig {
pub timeout_read: Option<Duration>,
pub timeout_write: Option<Duration>,
pub timeout: Option<Duration>,
pub no_delay: bool,
pub redirects: u32,
pub redirect_auth_headers: RedirectAuthHeaders,
pub user_agent: String,
@@ -238,6 +239,7 @@ impl AgentBuilder {
timeout_read: None,
timeout_write: None,
timeout: None,
no_delay: true,
redirects: 5,
redirect_auth_headers: RedirectAuthHeaders::Never,
user_agent: format!("ureq/{}", env!("CARGO_PKG_VERSION")),
@@ -433,6 +435,26 @@ impl AgentBuilder {
self
}
/// Whether no_delay will be set on the tcp socket.
/// Setting this to true disables Nagle's algorithm.
///
/// Defaults to true.
///
/// ```
/// # fn main() -> Result<(), ureq::Error> {
/// # ureq::is_test(true);
/// let agent = ureq::builder()
/// .no_delay(false)
/// .build();
/// let result = agent.get("http://httpbin.org/get").call();
/// # Ok(())
/// # }
/// ```
pub fn no_delay(mut self, no_delay: bool) -> Self {
self.config.no_delay = no_delay;
self
}
/// How many redirects to follow.
///
/// Defaults to `5`. Set to `0` to avoid redirects and instead

View File

@@ -407,6 +407,8 @@ pub(crate) fn connect_host(unit: &Unit, hostname: &str, port: u16) -> Result<Tcp
panic!("shouldn't happen: failed to connect to all IPs, but no error");
};
stream.set_nodelay(unit.agent.config.no_delay)?;
if let Some(deadline) = unit.deadline {
stream.set_read_timeout(Some(time_until_deadline(deadline)?))?;
} else {