diff --git a/src/comm/comm.go b/src/comm/comm.go index f3732c6..d2c1b9c 100644 --- a/src/comm/comm.go +++ b/src/comm/comm.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/binary" "fmt" + "io" "net" "time" @@ -85,22 +86,15 @@ func (c *Comm) Read() (buf []byte, numBytes int, bs []byte, err error) { if err := c.connection.SetReadDeadline(time.Now().Add(3 * time.Hour)); err != nil { log.Warnf("error setting read deadline: %v", err) } + // must clear the timeout setting + defer c.connection.SetDeadline(time.Time{}) // read until we get 4 bytes for the header - var header []byte - numBytes = 4 - for { - tmp := make([]byte, numBytes-len(header)) - n, errRead := c.connection.Read(tmp) - if errRead != nil { - err = errRead - log.Debugf("initial read error: %v", err) - return - } - header = append(header, tmp[:n]...) - if numBytes == len(header) { - break - } + header := make([]byte, 4) + _, err = io.ReadFull(c.connection, header) + if err != nil { + log.Debugf("initial read error: %v", err) + return } var numBytesUint32 uint32 @@ -117,25 +111,16 @@ func (c *Comm) Read() (buf []byte, numBytes int, bs []byte, err error) { log.Debug(err) return } - buf = make([]byte, 0) // shorten the reading deadline in case getting weird data if err := c.connection.SetReadDeadline(time.Now().Add(10 * time.Second)); err != nil { log.Warnf("error setting read deadline: %v", err) } - for { - // log.Debugf("bytes: %d/%d", len(buf), numBytes) - tmp := make([]byte, numBytes-len(buf)) - n, errRead := c.connection.Read(tmp) - if errRead != nil { - err = errRead - log.Debugf("consecutive read error: %v", err) - return - } - buf = append(buf, tmp[:n]...) - if numBytes == len(buf) { - break - } + buf = make([]byte, numBytes) + _, err = io.ReadFull(c.connection, buf) + if err != nil { + log.Debugf("consecutive read error: %v", err) + return } return } diff --git a/src/compress/compress.go b/src/compress/compress.go index 92373af..3343822 100644 --- a/src/compress/compress.go +++ b/src/compress/compress.go @@ -35,6 +35,7 @@ func compress(src []byte, dest io.Writer, level int) { compressor, err := flate.NewWriter(dest, level) if err != nil { log.Debugf("error level data: %v", err) + return } if _, err := compressor.Write(src); err != nil { log.Debugf("error writing data: %v", err) diff --git a/src/utils/utils.go b/src/utils/utils.go index 7fc074e..8a0224b 100644 --- a/src/utils/utils.go +++ b/src/utils/utils.go @@ -241,6 +241,7 @@ func RandomFileName() (fname string, err error) { return } fname = f.Name() + _ = f.Close() return }