var d Msg
err := bencode.Unmarshal(b, &d)
if err != nil {
+ readUnmarshalError.Add(1)
func() {
if se, ok := err.(*bencode.SyntaxError); ok {
// The message was truncated.
s.mu.Lock()
defer s.mu.Unlock()
if d["y"] == "q" {
+ readQuery.Add(1)
s.handleQuery(addr, d)
return
}
if err != nil {
return err
}
+ read.Add(1)
if n == len(b) {
logonce.Stderr.Printf("received dht packet exceeds buffer size")
continue
blocked := s.ipBlocked(util.AddrIP(addr))
s.mu.Unlock()
if blocked {
+ readBlocked.Add(1)
continue
}
s.processPacket(b[:n], newDHTAddr(addr))
--- /dev/null
+package dht
+
+import (
+ "expvar"
+)
+
+var (
+ read = expvar.NewInt("dhtRead")
+ readBlocked = expvar.NewInt("dhtReadBlocked")
+ readUnmarshalError = expvar.NewInt("dhtReadUnmarshalError")
+ readQuery = expvar.NewInt("dhtReadQuery")
+)