mirror of
https://github.com/tladesignz/dnstt.git
synced 2026-10-12 17:18:20 +03:00
There was a logic error in the code. The nextP variable was used to store the packet that was too big to pack into the most recent DNS response. But nextP was not tied to any particular ClientID; instead it would be sent to whatever client happened to be the recipient of the next response. The confusion didn't cause connections to fail completely; any misdirected packets were treated as out-of-sequence garbage by KCP and dropped. But it hurt performance a lot: I saw a download go from 300 KB/s to 50 KB/s just by connecting a second client with a different ClientID (not even sending or receiving with the second client). The reason is that a fraction of the packets intended for the downloading client were instead sent to the idle client, which to the downloading client looks like a packet drop, requiring a retransmission by the server. We fix it by placing the leftover packet in a per-ClientID stash, rather than a variable shared by all ClientIDs.