1.2 KiB
TCP Sprint
This script demonstrates the risk of interleaving writes when cloning
TcpStream handles across threads, re:
this discussion in the Servo Zulip.
It works by spawning 3 threads: 2 TCP clients, each of which sends predictable
chunks of bytes over a shared connection with TcpStream::write_all(), and 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.
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.
