Fix rereading tcp
This commit is contained in:
parent
397c22f212
commit
90a1d813d9
17
dns.go
17
dns.go
|
@ -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
|
||||
|
|
10
resolver.go
10
resolver.go
|
@ -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
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue