# Rust FIXP TCP connect timeout bounds — 2026-10-17

## Behavior and baseline

The public TcpTransport::connect added an arbitrary caller Duration to Instant.
An unrepresentable deadline now returns the error
`connect timeout exceeds representable deadline` before opening a TCP socket.
Its Connect::connect_tcp adapter keeps its existing replacement semantics: close
the previous transport first, return -1 on failure, leave it closed and allow a
subsequent ordinary connect. Signatures, normal bytes and refusal behavior stay
the same. FIXP protocol, flow and runner code is unchanged.

The four loopback regressions cover direct extreme-timeout refusal before TCP;
extreme reconnect with old-peer EOF, closed transport, no replacement connection,
and successful retry with bidirectional I/O; ordinary connect/I/O/drop; and an
ordinary refused endpoint held by a bound non-listening socket. Fixtures create
no files, use ephemeral ports and own all sockets through RAII.

Baseline `d5fda8b464f966e09731902079b6c75dcb641b50` contains the same fixture and unchanged production
code. Both development and open runs produce **two passes / two failures**,
Cargo exit 101. Each output contains both actual Instant-addition overflow
panics. The ordinary connect and refusal controls pass. Source and fixture hashes
are retained with the logs.

## Qualification

Qualified source: `85dbee2af802f02872f0c83dbdedf9d34efea87c`.

| Check | Result |
|---|---:|
| Actual rust-engine-tests stage | 2,736 passed, 0 ignored |
| Actual rust-open-edition-tests stage | 2,529 passed, 0 ignored |
| Focused fixture, development and open | four passed each |
| Strict all-target Clippy, both editions | passed, -D warnings |
| Rust documentation generation | passed, -D warnings |
| Fixture formatting and two engine-file export scans | passed, zero findings |
| API inventory, generated coverage and documentation facts | passed |

Both selected conformance stages report one run, zero failed/skipped stages and
actual Cargo exit zero. Counts include unit, integration and doctest results.
The wrapper's PARTIAL/exit 2 means selected stages, not full monorepo conformance.

All 397 Rust / 637 shared captured inputs match before and after.
BEELINK2 runs baseline and fixed qualification serially under shared-pool CPU
leases, one Cargo job, one test thread, debug symbols disabled, a 24/16 GiB
available-memory guard, a foreign-heavy-process guard and a 2/1 GiB disk guard.
Exact installed compiler, Cargo and Clippy versions and commands are retained.
The conservative process guard stops and restarts the development stage after
seeing an unrelated `javac --release 21 -version` probe; the interrupted attempt
is not counted as a passing stage. The guard log retains this restart.
Scan and HP start no heavy jobs for this slice. No numeric performance claim is made.

## Retention and scope

Raw correctness output, baseline failures, commands, input/fixture hashes and a
source bundle live outside Git at
~/archive/libhft/rust-fixp-connect-timeout-20261017 on all three development hosts.
No customer endpoint, input or credentials are used.

Static scores remain 82/82 applicable APIs, 27/27 protocol rows, 43 complete,
two partial and one not-applicable subsystem. Live venue endpoint/certification
and FIXP venue session/schema certification remain external requirements.
