Просмотр исходного кода

Use WriteTimeoutUDPConn with server-side UDP conns

- The same issue that WriteTimeoutUDPConn addresses -- WriteMsgUDP looping
  indefinitely on EAGAIN -- has been observed server-side.
Rod Hynes 2 лет назад
Родитель
Сommit
0fec89fa1c
1 измененных файлов с 7 добавлено и 1 удалено
  1. 7 1
      psiphon/common/quic/quic.go

+ 7 - 1
psiphon/common/quic/quic.go

@@ -172,8 +172,14 @@ func Listen(
 		return nil, errors.Trace(err)
 	}
 
+	// Ensure blocked packet writes eventually timeout. Note that quic-go
+	// manages read deadlines; we set only the write deadline here.
+	writeTimeoutUDPConn := &common.WriteTimeoutUDPConn{
+		UDPConn: udpConn,
+	}
+
 	obfuscatedPacketConn, err := NewServerObfuscatedPacketConn(
-		udpConn, true, false, false, obfuscationKey, seed)
+		writeTimeoutUDPConn, true, false, false, obfuscationKey, seed)
 	if err != nil {
 		udpConn.Close()
 		return nil, errors.Trace(err)