diff --git a/cmd/cmd.go b/cmd/cmd.go index 1d344a6..6496ed2 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -56,6 +56,7 @@ func Excute() { // In case of error print error and print usage // This can also be done by passing -h or --help flags fmt.Print(parser.Usage(err)) + return } if *ver { @@ -65,11 +66,6 @@ func Excute() { domain := *str - if domain == "" { - fmt.Print(parser.Usage(err)) - return - } - if *fast_trace { fastTrace.FastTest(*tcp, *output) if *output { @@ -79,6 +75,11 @@ func Excute() { os.Exit(0) } + if domain == "" { + fmt.Print(parser.Usage(err)) + return + } + capabilities_check() // return diff --git a/trace/trace.go b/trace/trace.go index 5de2cef..fa557dc 100644 --- a/trace/trace.go +++ b/trace/trace.go @@ -116,10 +116,25 @@ type Hop struct { } func (h *Hop) fetchIPData(c Config) (err error) { + timeout := time.Millisecond * 800 if c.RDns && h.Hostname == "" { - ptr, err := net.LookupAddr(h.Address.String()) - if err == nil && len(ptr) > 0 { - h.Hostname = ptr[0] + result := make(chan []string) + go func() { + r, err := net.LookupAddr(h.Address.String()) + if err != nil { + result <- nil + } else { + result <- r + } + }() + select { + case ptr := <-result: + // process result + if err == nil && len(ptr) > 0 { + h.Hostname = ptr[0] + } + case <-time.After(timeout): + // handle timeout } } if c.IPGeoSource != nil && h.Geo == nil {