Prepare 2.14.0.11 ALPHA release

Version bump across the three files that carry it: mux/include/_build.h
(MUX_VERSION, MUX_RELEASE_DATE) and OLD_BUILD/NEW_BUILD in dounix.sh and
dowin32.sh, which move 9->10 and 10->11 respectively.

CHANGES.md: close the 2.14.0.11 section that has been maintained through
the cycle, and add the client TCP_NODELAY work (#2204, #2205, #2206,
#2207) to Clients, which had #2196 for tf but not the other four native
clients.  Recorded with the wire measurement rather than by inspection --
two segments before the fix, five after, and no observable difference on
loopback at all.

Build-only changes are left out of the changelog as they have been all
cycle (#2177, #2180, #2185, #2211).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Stephen Dennis 2026-08-07 15:31:13 -06:00
parent d15b1dc3f8
commit 44c374ee5a
4 changed files with 24 additions and 7 deletions

View file

@ -21,9 +21,9 @@ set -u # Error on unset variables
set -o pipefail # A failure anywhere in a pipe fails the pipe
# Version information
OLD_BUILD=9
OLD_BUILD=10
OLD_VERSION="2.14.0.$OLD_BUILD"
NEW_BUILD=10
NEW_BUILD=11
NEW_VERSION="2.14.0.$NEW_BUILD"
# Directory structure

View file

@ -9,9 +9,9 @@ set -e # Exit on error
set -o pipefail
# Version information
OLD_BUILD=9
OLD_BUILD=10
OLD_VERSION="2.14.0.$OLD_BUILD"
NEW_BUILD=10
NEW_BUILD=11
NEW_VERSION="2.14.0.$NEW_BUILD"
# Directory structure

View file

@ -7,7 +7,7 @@ author:
Changes in TinyMUX 2.14 (relative to the 2.13 branch point).
# Changes in 2.14.0.11 (UNRELEASED):
# Changes in 2.14.0.11 (2026-AUG-07):
A performance cycle, and a narrow one on purpose: seventy-odd changes since
2.14.0.10, almost all of them either measuring the server or making a measured
@ -284,6 +284,23 @@ release carried the bad state.
one command is one `write()` — but a trigger, a multi-command macro or a
scripted burst issues several small writes in one pass, and Nagle made
each wait on the ACK of the one before it.
- **The remaining four native clients now set it as well** (#2204#2205
console and win32gui, #2206 Titan Android, #2207 Titan iOS). A survey
after #2196 found `TCP_NODELAY` mentioned in exactly one file across all
of `client/`, so every other client still ran its session socket with
Nagle enabled. The two mobile clients are simultaneously the ones it
costs most — high-RTT, lossy, radio-scheduled links — and the ones whose
platforms make it worst: Java's `Socket` and Network.framework's
`NWProtocolTCP.Options` both default the option to *false*, so nothing
was overriding it.
- This one was verified on the wire rather than by inspection. Five small
writes issued in one pass, captured against a remote server: before the
fix the client put **two** segments on the link — the first 2 bytes, then
the remaining 8 coalesced and withheld until the ACK — and after it,
**five**, all departing within 0.1ms. The identical burst over loopback
shows no difference whatsoever, which is precisely why it had to be
measured against a real link: there the ACK returns faster than the next
write is issued, so Nagle never engages and the bug is invisible.
## Notes

View file

@ -6,8 +6,8 @@
#ifndef _BUILD_H
#define _BUILD_H
#define MUX_VERSION "2.14.0.10" // Version number
#define MUX_RELEASE_DATE "2026-AUG-02" // Source release date
#define MUX_VERSION "2.14.0.11" // Version number
#define MUX_RELEASE_DATE "2026-AUG-07" // Source release date
// Define if this release is qualified as ALPHA or BETA.
//