feat(utils): add timeout on ping request

This commit is contained in:
nullcat
2026-05-24 23:38:46 +08:00
parent 56f37faa84
commit d12ad615cf
+15 -2
View File
@@ -11,6 +11,7 @@ import (
"time" "time"
"tailscale.com/client/local" "tailscale.com/client/local"
"tailscale.com/ipn/ipnstate"
"tailscale.com/tailcfg" "tailscale.com/tailcfg"
"tailscale.com/tsnet" "tailscale.com/tsnet"
) )
@@ -109,11 +110,23 @@ func getPeerFromRules(ctx context.Context, srv *tsnet.Server, rules map[string][
func peerConnectivityLogic(ctx context.Context, lc *local.Client, relativePeers []netip.Addr, logger *slog.Logger) { func peerConnectivityLogic(ctx context.Context, lc *local.Client, relativePeers []netip.Addr, logger *slog.Logger) {
for _, peer := range relativePeers { for _, peer := range relativePeers {
ping, err := lc.Ping(ctx, peer, tailcfg.PingDisco) ping, err := func() (*ipnstate.PingResult, error) {
cnclCtx, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()
ping, err := lc.Ping(cnclCtx, peer, tailcfg.PingDisco)
return ping, err
}()
if err != nil { if err != nil {
logger.Debug("connectivity: failed to ping peer", "peer", peer, "err", err) if errors.Is(err, context.DeadlineExceeded) {
logger.Warn("connectivity: peer ping timeout", "peer", peer)
} else {
logger.Warn("connectivity: failed to ping peer", "peer", peer, "err", err)
}
return return
} }
var connect string var connect string
if ping.DERPRegionCode == "" { if ping.DERPRegionCode == "" {
connect = "direct" connect = "direct"