The kernel queue that holds pending handshakes before accept

The TCP backlog holds connections that are still syncing

A listening TCP socket has two queues, not one, and the sysctl this article is named after governs the queue that almost never drops anything. The backlog passed to listen(2) is the accept queue, holding connections that finished the handshake and await the application; the SYN queue holds half-open requests. Confusing them produces the wrong fix. ...

March 24, 2028 · 4 min · XB Field Notes
A bulk sender grows its congestion window while an idle or application-limited sender need not double it.

TCP slow start grows with acknowledged data, not merely with elapsed time

Slow start grows a TCP sender’s congestion window while it learns how much outstanding data the path can support. With enough data and suitable acknowledgments, the classic behavior is approximately exponential growth across round trips. “Doubles every RTT” is a useful simplified pattern, not an unconditional timer rule. The window changes in response to transport feedback and the implementation’s growth conditions. ...

December 28, 2027 · 6 min · XB Field Notes
Each endpoint advertises its own scale; SYN window fields remain unscaled.

TCP window scaling enlarges receive-window encoding in each direction

TCP’s header has a 16-bit receive-window field. Window scaling lets established connections interpret that field using a shift negotiated during setup, allowing a receiver to advertise more than 65535 bytes of space. The two directions can use different shifts. The extension enlarges the encoding of receive-window information; it does not directly enlarge every buffer or guarantee that a sender will keep that much data in flight. ...

December 2, 2027 · 6 min · XB Field Notes
The server waits for the second request byte while Nagle waits for acknowledgment of the first.

Nagle and delayed ACK can stall the second part of a small request

Nagle’s algorithm reduces small TCP segments by holding additional short data while earlier data remains unacknowledged, unless enough data accumulates for a full segment. Delayed acknowledgment is a separate receiver behavior that can postpone an ACK briefly. The interaction matters when an application sends a request in multiple small writes and the peer needs the later bytes before producing a response. ...

October 31, 2027 · 6 min · XB Field Notes
Encoding handshake state into the sequence number so a server can skip its backlog.

SYN cookies answer when the queue overflows

A listening socket keeps two queues, not one. Half-open connections live in the SYN queue until the final ACK arrives; established ones then wait in the accept queue until the application calls accept(). Both have a limit, and which one overflows decides what the client experiences. ...

October 30, 2027 · 5 min · XB Field Notes
Accepting drains the listener queue; the backlog is not the total number of open application connections.

The listen backlog holds connections waiting for accept

On Linux TCP sockets, the listen() backlog concerns established connections waiting for the application to accept them. The incomplete-handshake queue is a separate concept. Calling accept() removes a pending connection and returns a connected socket for application use. That accepted connection no longer occupies the listener’s accept queue, even if it remains open and busy for a long time. ...

October 25, 2027 · 4 min · XB Field Notes
Observe-decide-act boxes beside the message: Probe TCP peers, not app health.

TCP keepalive probes idle connections

TCP keepalive asks whether the other TCP endpoint still responds after a quiet period. It does not ask whether an HTTP handler, database query, or worker is making progress. A peer’s kernel can acknowledge traffic while its application is stalled. Treat transport reachability and useful application responses as different observations. ...

October 5, 2027 · 5 min · XB Field Notes
The cumulative ACK stops at a missing range while SACK describes later bytes already received.

SACK reports received ranges beyond a gap so recovery can target missing data

A TCP cumulative acknowledgment identifies the next byte expected in order. If a segment is missing but later bytes arrive, that acknowledgment cannot advance across the hole. Selective Acknowledgment, or SACK, adds information about received byte ranges beyond the cumulative boundary. It helps a sender distinguish missing data from data already queued at the receiver, improving the information available to its recovery algorithm. ...

September 11, 2027 · 6 min · XB Field Notes