From f3af9bd5bc3fd594e12494cede4a87a0a6e1ede0 Mon Sep 17 00:00:00 2001
From: Matt Joiner <anacrolix@gmail.com>
Date: Tue, 24 Jun 2014 23:19:19 +1000
Subject: [PATCH] Wrap server UDP sends to ensure the node last send is updated

---
 dht/dht.go | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/dht/dht.go b/dht/dht.go
index c251cbcb..e7e4fd94 100644
--- a/dht/dht.go
+++ b/dht/dht.go
@@ -147,7 +147,7 @@ func (s *Server) reply(addr *net.UDPAddr, t string) {
 	if err != nil {
 		panic(err)
 	}
-	_, err = s.Socket.WriteTo(b, addr)
+	err = s.writeToNode(b, addr)
 	if err != nil {
 		panic(err)
 	}
@@ -170,6 +170,19 @@ func (s *Server) getNode(addr *net.UDPAddr) (n *Node) {
 	return
 }
 
+func (s *Server) writeToNode(b []byte, node *net.UDPAddr) (err error) {
+	n, err := s.Socket.WriteTo(b, node)
+	if err != nil {
+		return
+	}
+	if n != len(b) {
+		err = io.ErrShortWrite
+		return
+	}
+	s.sentToNode(node)
+	return
+}
+
 func (s *Server) sentToNode(addr *net.UDPAddr) {
 	n := s.getNode(addr)
 	n.lastSentTo = time.Now()
@@ -237,17 +250,10 @@ func (s *Server) query(node *net.UDPAddr, q string, a map[string]string) (t *tra
 	}
 	t.response = t.Response
 	s.addTransaction(t)
-	n, err := s.Socket.WriteTo(b, node)
+	err = s.writeToNode(b, node)
 	if err != nil {
 		s.removeTransaction(t)
-		return
-	}
-	if n != len(b) {
-		err = io.ErrShortWrite
-		s.removeTransaction(t)
-		return
 	}
-	s.sentToNode(node)
 	return
 }
 
-- 
2.51.0