Will It Blend? - TCP Streams
Find a file
Brent Schroeter 0550cdf707 update readme
2026-03-15 23:22:20 -07:00
src reduce test duration from 5 seconds to 1 2026-03-13 22:46:01 +00:00
.gitignore initial commit 2026-03-13 22:04:46 +00:00
Cargo.lock initial commit 2026-03-13 22:04:46 +00:00
Cargo.toml initial commit 2026-03-13 22:04:46 +00:00
LICENSE add license 2026-03-13 22:07:15 +00:00
mise.toml initial commit 2026-03-13 22:04:46 +00:00
README.md update readme 2026-03-15 23:22:20 -07:00
screenshot.png update documentation based on test results 2026-03-13 22:46:41 +00:00

Will It Blend

This script demonstrates the risk of interleaving writes when cloning TcpStream handles across threads, re: this discussion in the Servo Zulip.

It spawns 3 threads:

  • 2 TCP clients, each of which sends predictable chunks of bytes over a shared connection with TcpStream::write_all()
  • 1 TCP listener, which tests whether messages arrive contiguously or scrambled together

Messages consist of the range 0x00..=0xff, repeated to fill the desired message size. The TCP listener prints a warning if it detects any byte received out of order.

Usage

cargo run --release <message size in bytes>

Results

A message size of 1024 bytes can be sufficient to trigger fragmentation when running an optimized build. Results from debug builds are hit-or-miss depending on the host system: they may have no issues with fragmentation regardless of message size, or they may encounter issues at closer to 4096 bytes.

Terminal screenshot showing results of running script with 512 and 1024 byte messages. The first run has no errors, while the second one displays two "out of order" warnings.