From e52c71a25cd42a18e6ff83ba1f1b4886311860cc Mon Sep 17 00:00:00 2001
From: Manish R Jain <manishrjain@gmail.com>
Date: Wed, 9 Mar 2016 14:26:30 +1100
Subject: [PATCH] Use io.ReadFull to allow for Read() returning before reading
 the full buffer

---
 conn/client.go | 6 +-----
 conn/server.go | 8 ++------
 2 files changed, 3 insertions(+), 11 deletions(-)

diff --git a/conn/client.go b/conn/client.go
index 2b668dc0..27bdd904 100644
--- a/conn/client.go
+++ b/conn/client.go
@@ -42,11 +42,7 @@ func (c *ClientCodec) ReadResponseHeader(r *rpc.Response) error {
 
 func (c *ClientCodec) ReadResponseBody(body interface{}) error {
 	buf := make([]byte, c.payloadLen)
-	n, err := c.Rwc.Read(buf)
-	if n != int(c.payloadLen) {
-		return fmt.Errorf("ClientCodec expected: %d. Got: %d\n", c.payloadLen, n)
-	}
-
+	_, err := io.ReadFull(c.Rwc, buf)
 	reply := body.(*Reply)
 	reply.Data = buf
 	return err
diff --git a/conn/server.go b/conn/server.go
index e3e7c4db..7085d353 100644
--- a/conn/server.go
+++ b/conn/server.go
@@ -1,7 +1,6 @@
 package conn
 
 import (
-	"errors"
 	"io"
 	"log"
 	"net/rpc"
@@ -18,12 +17,9 @@ func (c *ServerCodec) ReadRequestHeader(r *rpc.Request) error {
 
 func (c *ServerCodec) ReadRequestBody(data interface{}) error {
 	b := make([]byte, c.payloadLen)
-	n, err := c.Rwc.Read(b)
+	_, err := io.ReadFull(c.Rwc, b)
 	if err != nil {
-		log.Fatal("server", err)
-	}
-	if n != int(c.payloadLen) {
-		return errors.New("ServerCodec unable to read request.")
+		return err
 	}
 
 	if data == nil {
-- 
GitLab