diff --git a/cmd/ctrld/control_client.go b/cmd/ctrld/control_client.go index 0a94c99..8a41193 100644 --- a/cmd/ctrld/control_client.go +++ b/cmd/ctrld/control_client.go @@ -20,7 +20,7 @@ func newControlClient(addr string) *controlClient { return d.DialContext(ctx, "unix", addr) }, }, - Timeout: time.Second * 5, + Timeout: time.Second * 30, }} } diff --git a/internal/clientinfo/client_info.go b/internal/clientinfo/client_info.go index 4d6d065..f648ac9 100644 --- a/internal/clientinfo/client_info.go +++ b/internal/clientinfo/client_info.go @@ -229,6 +229,14 @@ func (t *Table) lookupHostnameAll(ip, mac string) []*hostnameEntry { var res []*hostnameEntry for _, r := range t.hostnameResolvers { src := r.String() + // For ptrDiscover, lookup hostname may block due to server unavailable, + // so only lookup from cache to prevent timeout reached. + if ptrResolver, ok := r.(*ptrDiscover); ok { + if name := ptrResolver.lookupHostnameFromCache(ip); name != "" { + res = append(res, &hostnameEntry{name: name, src: src}) + } + continue + } if name := r.LookupHostnameByIP(ip); name != "" { res = append(res, &hostnameEntry{name: name, src: src}) continue diff --git a/internal/clientinfo/ptr_lookup.go b/internal/clientinfo/ptr_lookup.go index 29526fa..ba76b12 100644 --- a/internal/clientinfo/ptr_lookup.go +++ b/internal/clientinfo/ptr_lookup.go @@ -40,6 +40,13 @@ func (p *ptrDiscover) String() string { return "ptr" } +func (p *ptrDiscover) lookupHostnameFromCache(ip string) string { + if val, ok := p.hostname.Load(ip); ok { + return val.(string) + } + return "" +} + func (p *ptrDiscover) lookupHostname(ip string) string { ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel()