| 1 | + | Randomize the source port for each query in plain-UDP mode. Currently we |
| 2 | + | create a socket with net.ListenUDP and use it for all queries, which |
| 3 | + | means all queries have the same source address. ValdikSS reports that in |
| 4 | + | regions of Turkmenistan, UDP associations that use the same 4-tuple are |
| 5 | + | blocked after a few seconds. |
| 6 | + | https://ntc.party/t/topic/475 |
| 7 | + | My idea for this is to create a new PacketConn abstraction that creates |
| 8 | + | a bunch (≈100) of goroutines that each do a single query at a time, |
| 9 | + | creating a new socket for each one and waiting for a response on the |
| 10 | + | same socket up to a timeout. Similar to HTTPPacketConn and its multiple |
| 11 | + | instantiations of sendLoop. |
| 12 | + | |