TCP: re-read until all promised bytes are read.

Works for long tcp packets
This commit is contained in:
Miek Gieben 2011-02-27 15:50:01 +01:00
parent 180ac4cd11
commit 13ab14dd2f
2 changed files with 15 additions and 7 deletions

View File

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

View File

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