TODO about TLSPacketConn redial failure.

This commit is contained in:
David Fifield
2021-08-03 21:24:21 -06:00
parent e4dc2883ef
commit 46acde28bc
+21
View File
@@ -1,3 +1,24 @@
In -dot mode, if, after the TLS connection may become disconnected, the
redial fails to connect, it results in "operation on closed connection"
errors and a useless connection up until idleTimeout (2 to 4 minutes
later), when the stream ends. For example, see
1-12c59bf6/quad9_dot_1.dnstt.client.log from the 2021-08-02 dnstt-tests
performance measurement:
2021/08/02 10:00:49 recvLoop: read tcp 10.0.1.2:34788->9.9.9.9:853: read: connection reset by peer
2021/08/02 10:00:49 sendLoop: write tcp 10.0.1.2:34788->9.9.9.9:853: write: broken pipe
2021/08/02 10:00:50 tls.Dial: dial tcp 9.9.9.9:853: connect: connection refused
2021/08/02 10:00:50 recvLoop: read dummy dummy: operation on closed connection
2021/08/02 10:00:50 send: write dummy dummy: operation on closed connection
2021/08/02 10:00:52 send: write dummy dummy: operation on closed connection
...
2021/08/02 10:03:02 send: write dummy dummy: operation on closed connection
2021/08/02 10:03:06 send: write dummy dummy: operation on closed connection
2021/08/02 10:03:09 end stream cde4ab0c:3
To fix this, we could be more persistent in redialing, and/or cause a
redial failure to cause the stream and session to terminate immediately.
We already close TLSPacketConn; we should perhaps also terminate
DNSPacketConn.sendLoop.
Randomize the source port for each query in plain-UDP mode. Currently we
create a socket with net.ListenUDP and use it for all queries, which
means all queries have the same source address. ValdikSS reports that in