Wrap server UDP sends to ensure the node last send is updated

This commit is contained in:
Matt Joiner 2014-06-24 23:19:19 +10:00
parent 1852e5805d
commit f3af9bd5bc
1 changed files with 15 additions and 9 deletions

View File

@ -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
}