package route import ( "context" "net/netip" "github.com/sagernet/sing-box/adapter" "github.com/sagernet/sing-box/common/process" ) type processCacheKey struct { Network string Source netip.AddrPort Destination netip.AddrPort } type processCacheEntry struct { result *adapter.ConnectionOwner err error } func (r *Router) findProcessInfoCached(ctx context.Context, network string, source netip.AddrPort, destination netip.AddrPort) (*adapter.ConnectionOwner, error) { key := processCacheKey{ Network: network, Source: source, Destination: destination, } if entry, ok := r.processCache.Get(key); ok { return entry.result, entry.err } result, err := process.FindProcessInfo(r.processSearcher, ctx, network, source, destination) r.processCache.Add(key, processCacheEntry{result: result, err: err}) return result, err }