Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@kevinWangSheng
Copy link
Contributor

Add two new configuration methods to the Server builder:

  • tcp_keepalive_interval(): Sets TCP_KEEPINTVL socket option
  • tcp_keepalive_retries(): Sets TCP_KEEPCNT socket option

These options were already implemented in TcpIncoming but not exposed through the Server builder API. This change allows users to fine-tune TCP keepalive behavior for scenarios like:

  • Cloud load balancer idle timeout matching
  • NAT traversal requirements
  • Faster dead connection detection

The new options default to None (system default) and only take effect when tcp_keepalive() is also configured.

Motivation

TcpIncoming already supports with_keepalive_interval() and with_keepalive_retries(), but these are not exposed through the Server builder. Users need fine-grained control over TCP keepalive for cloud LB timeout matching and faster dead connection detection.

Solution

Add tcp_keepalive_interval() and tcp_keepalive_retries() methods to Server builder, passing them through to TcpIncoming in bind_incoming(). Both default to None and only take effect when tcp_keepalive() is also set. Tests updated accordingly.

Add two new configuration methods to the Server builder:
- `tcp_keepalive_interval()`: Sets TCP_KEEPINTVL socket option
- `tcp_keepalive_retries()`: Sets TCP_KEEPCNT socket option

These options were already implemented in TcpIncoming but not exposed
through the Server builder API. This change allows users to fine-tune
TCP keepalive behavior for scenarios like:
- Cloud load balancer idle timeout matching
- NAT traversal requirements
- Faster dead connection detection

The new options default to None (system default) and only take effect
when tcp_keepalive() is also configured.
Copy link
Collaborator

@tottoto tottoto left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@tottoto tottoto merged commit e36cc30 into hyperium:master Jan 1, 2026
20 checks passed
LucioFranco added a commit that referenced this pull request Jan 28, 2026
# Changelog for v0.14.3

## Features

- Expose `tcp_keepalive_interval` and `tcp_keepalive_retries` options on
Server (#2472)
- Allow configuration of `max_local_error_reset_streams` on Server
(#2437)
- Put source error into the `Display` impl of `Status` (#2417)
- `Server::default()` now sets `TCP_NODELAY` to true (#2413)

## Bug Fixes

- Respect `max_message_size` when decompressing a message (#2484)
- Depend on http at least 1.1.0 (#2426)

## Documentation

- Fix documentation links for timeout configuration (#2483)
- Fix documentation typos and grammar issues in status.rs and
codec/mod.rs (#2468)
- Fix labels in `Display for Status` (#2414)
- Fix features docs in tonic-build and tonic-prost-build (#2434)
- Remove redundant word in tonic-build and tonic-prost-build README
(#2425)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants