diff --git a/wg/wg.go b/wg/wg.go index 5a512d6..a14e2c3 100644 --- a/wg/wg.go +++ b/wg/wg.go @@ -952,22 +952,30 @@ func (s *WireGuardService) encryptPayload(payload []byte) (interface{}, error) { } func (s *WireGuardService) keepSendingUDPHolePunch(host string) { + logger.Info("Starting UDP hole punch routine to %s:21820", host) + // send initial hole punch if err := s.sendUDPHolePunch(host + ":21820"); err != nil { - logger.Error("Failed to send initial UDP hole punch: %v", err) + logger.Debug("Failed to send initial UDP hole punch: %v", err) } ticker := time.NewTicker(3 * time.Second) defer ticker.Stop() + timeout := time.NewTimer(15 * time.Second) + defer timeout.Stop() + for { select { case <-s.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 := s.sendUDPHolePunch(host + ":21820"); err != nil { - logger.Error("Failed to send UDP hole punch: %v", err) + logger.Debug("Failed to send UDP hole punch: %v", err) } } } diff --git a/wgnetstack/wgnetstack.go b/wgnetstack/wgnetstack.go index 08d740e..f6708e9 100644 --- a/wgnetstack/wgnetstack.go +++ b/wgnetstack/wgnetstack.go @@ -1076,11 +1076,17 @@ func (s *WireGuardService) keepSendingUDPHolePunch(host string) { ticker := time.NewTicker(3 * time.Second) defer ticker.Stop() + timeout := time.NewTimer(15 * time.Second) + defer timeout.Stop() + for { select { case <-s.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 := s.sendUDPHolePunch(host + ":21820"); err != nil { logger.Debug("Failed to send UDP hole punch: %v", err)