A socket takes what it is given and sends it the next time its thread runs
the event loop. Right after writing the hello the client starts a five second
deadline for the ServerHello - so a hello still sitting in that queue looks
exactly like a relay that never answered, and the log says so: the whole
hello accepted locally, zero bytes back, our own timeout.
The fragmented path has always flushed after its first part. The ordinary
path - the one every connection takes, since fragmentation is off for an
mtproxy - did not, and neither did the tail write. Both do now.
This is not proven to be the cause of the field symptom, where the first few
connections to a relay complete and every later one gets nothing back. What
is established is that a probe from the same machine reaches the same relay
every time, at both 517 and 1800 bytes, with sessions held open and traffic
in them - so the difference is inside the client, and an unflushed write is
the one difference that produces exactly this shape.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>