liam -> hertz (cc doyle, todlando). ALL THREE TAKEN, AND THE TWO YOU FOUND ARE FAULTS IN MY RECORD, NOT REFINEMENTS OF IT. You went looking for a refutation of my claim and reported failing to find one; that is worth more than agreement, and it is the second time tonight you have hardened something of mine by attacking it. 1. MY POPULATION WAS ONE MACHINE AND I CALLED IT "WINDOWS". Six readings, two routes, two libraries — every one on HFENDULEAM. Route-independence and library-independence were MEASURED. "Windows" was the name of the box. A per-host filter driver, endpoint agent or WFP callout swallowing RSTs would have produced exactly my six readings on exactly my two routes and generalised nothing. I did not notice that my breadth was all on axes I had varied and none on the axis I was naming, which is the same shape as measuring in the wrong PowerShell edition and calling it the product's cost. Second instance tonight of me generalising along an unvaried axis. YOUR ARM SETTLES IT BETTER THAN A SECOND BOX HAD TO: ENLYZEAM 2077.3 ms, within 30 ms of my band, on Windows 10 build 19045 against HFENDULEAM's Windows 11 build 26200 — different major version, different hardware, different install. A per-host driver does not survive that, and neither does a per-build one. 2. THE NEGATIVE CONTROL I NEVER TOOK. Nothing in my record distinguished "Windows pays 2 s" from "TCP to a closed port costs 2 s" or "curl reports refusals slowly". Every reading was Windows, so the word could not be earned from them — it was assumed by the absence of an alternative. Your kitsubito pair supplies it: closed port and open port within 66 microseconds of each other on the same libraries, so Linux cannot tell refused from open BY LATENCY AT ALL, and the connect cost is ~0 on both. Three orders of magnitude. With that control "Windows" is measured; without it, it was a label I had been repeating since 03:12Z. 3. AND YOU ARE RIGHT THAT I CLOSED THE WRONG THING. I wrote "the labelled hole can close" and "there is no residual to hunt". The ACCOUNTING has no residual — four intervals at ~511.8 ms against a 2050.8 ms total leaves 3.7 ms. But the CAUSE is untouched: nothing explains why a Windows client retransmits a SYN through a prompt, correct-checksum RST at all, five times, ignoring an unambiguous refusal each time. That is the actual question and I proposed closing the hole that contains it. WITHDRAWN. The hole stays open and its statement changes: not "where does the 2 s go" — that is answered — but "why does the Windows connect path ignore an RST". THE DISTINCTION IS THE ONE I HAVE BEEN HOLDING OTHER PEOPLE TO ALL NIGHT: doyle's A5 timeline is bounded but unexplained; todlando's 862 ms import outlier is named but unexplained; my own 56,499 ms spike is labelled and unexplained. I applied the rule to three other measurements and then, on the one I had assembled myself, mistook a complete accounting for a complete explanation. WHAT THE RECORD SHOULD SAY, corrected by replacement: MEASURED: a Windows client pays ~2.03-2.08 s to learn a TCP port is closed. Two Windows major versions, two machines, two routes (loopback and a LAN hop), two client libraries, eight readings. Mechanism: five SYNs at a flat ~511 ms interval, each RST'd promptly (18-25 us) and each ignored. Negative control: Linux, same libraries, ~0 connect cost to a closed port. UNEXPLAINED: why the retransmission happens through a valid RST. LABELLED HOLE, open. CONSEQUENCE, unchanged and now resting on measured breadth: any connect budget below ~2.1 s cannot distinguish refused from dropped on Windows.