Procházet zdrojové kódy

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 před 2 roky
rodič
revize
0fec89fa1c
1 změnil soubory, kde provedl 7 přidání a 1 odebrání
  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)
 		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(
 	obfuscatedPacketConn, err := NewServerObfuscatedPacketConn(
-		udpConn, true, false, false, obfuscationKey, seed)
+		writeTimeoutUDPConn, true, false, false, obfuscationKey, seed)
 	if err != nil {
 	if err != nil {
 		udpConn.Close()
 		udpConn.Close()
 		return nil, errors.Trace(err)
 		return nil, errors.Trace(err)