2
0
mirror of synced 2025-02-24 14:48:27 +00:00
torrent/cmd/dht-ping/main.go
2014-08-17 00:44:05 +10:00

59 lines
1.1 KiB
Go

package main
import (
"bitbucket.org/anacrolix/go.torrent/dht"
"flag"
"log"
"net"
"os"
)
type pingResponse struct {
addr string
krpc dht.Msg
}
func main() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
flag.Parse()
pingStrAddrs := flag.Args()
if len(pingStrAddrs) == 0 {
os.Stderr.WriteString("u must specify addrs of nodes to ping e.g. router.bittorrent.com:6881\n")
os.Exit(2)
}
s := dht.Server{}
var err error
s.Socket, err = net.ListenUDP("udp4", nil)
if err != nil {
log.Fatal(err)
}
log.Printf("dht server on %s", s.Socket.LocalAddr())
s.Init()
go func() {
err := s.Serve()
if err != nil {
log.Fatal(err)
}
}()
pingResponses := make(chan pingResponse)
for _, netloc := range pingStrAddrs {
addr, err := net.ResolveUDPAddr("udp4", netloc)
if err != nil {
log.Fatal(err)
}
t, err := s.Ping(addr)
if err != nil {
log.Fatal(err)
}
go func(addr string) {
pingResponses <- pingResponse{
addr: addr,
krpc: <-t.Response,
}
}(netloc)
}
for _ = range pingStrAddrs {
log.Printf("%q", <-pingResponses)
}
}