11 "github.com/anacrolix/torrent/dht"
14 type pingResponse struct {
21 log.SetFlags(log.LstdFlags | log.Lshortfile)
22 timeout := flag.Duration("timeout", -1, "maximum timeout")
24 pingStrAddrs := flag.Args()
25 if len(pingStrAddrs) == 0 {
26 os.Stderr.WriteString("u must specify addrs of nodes to ping e.g. router.bittorrent.com:6881\n")
29 s, err := dht.NewServer(nil)
33 log.Printf("dht server on %s", s.Addr())
34 pingResponses := make(chan pingResponse)
35 timeoutChan := make(chan struct{})
37 for i, netloc := range pingStrAddrs {
39 time.Sleep(1 * time.Millisecond)
41 addr, err := net.ResolveUDPAddr("udp4", netloc)
45 t, err := s.Ping(addr)
50 t.SetResponseHandler(func(addr string) func(dht.Msg) {
51 return func(resp dht.Msg) {
52 pingResponses <- pingResponse{
55 rtt: time.Now().Sub(start),
67 for _ = range pingStrAddrs {
69 case resp := <-pingResponses:
74 fmt.Printf("%-65s %s\n", fmt.Sprintf("%x (%s):", resp.krpc["r"].(map[string]interface{})["id"].(string), resp.addr), resp.rtt)
79 // timeouts := len(pingStrAddrs) - responses
80 fmt.Printf("%d/%d responses (%f%%)\n", responses, len(pingStrAddrs), 100*float64(responses)/float64(len(pingStrAddrs)))