TCP: re-read until all promised bytes are read.
Works for long tcp packets
This commit is contained in:
parent
180ac4cd11
commit
13ab14dd2f
10
resolver.go
10
resolver.go
|
@ -188,10 +188,10 @@ Server:
|
|||
return
|
||||
}
|
||||
x.Add = true
|
||||
if k != 0 {
|
||||
// Intermediate SOA
|
||||
continue
|
||||
}
|
||||
if k != 0 {
|
||||
// Intermediate SOA
|
||||
continue
|
||||
}
|
||||
case r.(*RR_SOA).Serial != serial:
|
||||
x.Add = false
|
||||
continue // Don't need to see this SOA
|
||||
|
@ -437,7 +437,7 @@ func recvTCP(c net.Conn) ([]byte, os.Error) {
|
|||
return nil, cerr
|
||||
}
|
||||
i := n
|
||||
if i < int(length) {
|
||||
for i < int(length) {
|
||||
n, err = c.Read(m[i:])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
12
server.go
12
server.go
|
@ -99,15 +99,23 @@ func SendTCP(m []byte, c *net.TCPConn, a net.Addr) os.Error {
|
|||
l[0] = byte(len(m) >> 8)
|
||||
l[1] = byte(len(m))
|
||||
// First we send the length
|
||||
_, err := c.Write(l)
|
||||
n, err := c.Write(l)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// And the the message
|
||||
_, err = c.Write(m)
|
||||
n, err = c.Write(m)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
i := n
|
||||
for i < len(m) {
|
||||
n, err = c.Write(m)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
i += n
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue