diff --git a/common.go b/common.go index 500c0be..b11bac9 100644 --- a/common.go +++ b/common.go @@ -402,11 +402,17 @@ func keepSendingUDPHolePunchToMultipleExitNodes(exitNodes []ExitNode, olmID stri ticker := time.NewTicker(250 * time.Millisecond) defer ticker.Stop() + timeout := time.NewTimer(15 * time.Second) + defer timeout.Stop() + for { select { case <-stopHolepunch: logger.Info("Stopping UDP holepunch for all exit nodes") return + case <-timeout.C: + logger.Info("UDP holepunch routine timed out after 15 seconds for all exit nodes") + return case <-ticker.C: // Send hole punch to all exit nodes for _, node := range resolvedNodes { @@ -471,11 +477,17 @@ func keepSendingUDPHolePunch(endpoint string, olmID string, sourcePort uint16, s ticker := time.NewTicker(250 * time.Millisecond) defer ticker.Stop() + timeout := time.NewTimer(15 * time.Second) + defer timeout.Stop() + for { select { case <-stopHolepunch: logger.Info("Stopping UDP holepunch") return + case <-timeout.C: + logger.Info("UDP holepunch routine timed out after 15 seconds") + return case <-ticker.C: if err := sendUDPHolePunchWithConn(conn, remoteAddr, olmID, serverPubKey); err != nil { logger.Error("Failed to send UDP hole punch: %v", err)