Fix rereading tcp

This commit is contained in:
Miek Gieben 2011-03-21 14:20:46 +01:00
parent 397c22f212
commit 90a1d813d9
2 changed files with 21 additions and 6 deletions

17
dns.go
View File

@ -103,10 +103,11 @@ func (d *Conn) Read(p []byte) (n int, err os.Error) {
for i < int(l) {
n, err = d.TCP.Read(p[i:])
if err != nil {
return 0, err
return i, err
}
i += n
}
n = i
}
if d.Tsig != nil {
// Check the TSIG that we should be read
@ -135,6 +136,7 @@ func (d *Conn) Write(p []byte) (n int, err os.Error) {
q, ok = d.Tsig.Generate(p)
if !ok {
// dikke shit
// Generate should return os.Error
}
} else {
q = p
@ -172,6 +174,19 @@ func (d *Conn) Write(p []byte) (n int, err os.Error) {
}
return n, err
}
i := n
if i < len(q) {
n, err = d.TCP.Write(q)
if err != nil {
if e, ok := err.(net.Error); ok && e.Timeout() {
// We are half way in our write...
continue
}
return n, err
}
i += n
}
n = i
}
}
return

View File

@ -78,7 +78,7 @@ func (res *Resolver) Query(q *Msg, tsig *Tsig) (d *Msg, err os.Error) {
if err != nil {
continue
}
in.Unpack(inb)
in.Unpack(inb) // Discard error.
res.Rtt[server] = time.Nanoseconds() - t
c.Close()
break
@ -155,7 +155,7 @@ Server:
continue Server
}
in.Unpack(inb) // error!
in.Unpack(inb)
if in.Id != q.Id {
return
}
@ -254,10 +254,10 @@ Server:
c.Close()
continue Server
}
in.Unpack(inb) // TODO(mg): error handling
if !in.Unpack(inb) {
return
}
if in.Id != q.Id {
c.Close()
return
}