mirror of https://github.com/schollz/croc.git
Merge pull request #280 from fooofei/bug/review
CodeReview: fix resource leak && shorter code
This commit is contained in:
commit
626490545a
|
@ -4,6 +4,7 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"time"
|
"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 {
|
if err := c.connection.SetReadDeadline(time.Now().Add(3 * time.Hour)); err != nil {
|
||||||
log.Warnf("error setting read deadline: %v", err)
|
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
|
// read until we get 4 bytes for the header
|
||||||
var header []byte
|
header := make([]byte, 4)
|
||||||
numBytes = 4
|
_, err = io.ReadFull(c.connection, header)
|
||||||
for {
|
if err != nil {
|
||||||
tmp := make([]byte, numBytes-len(header))
|
log.Debugf("initial read error: %v", err)
|
||||||
n, errRead := c.connection.Read(tmp)
|
return
|
||||||
if errRead != nil {
|
|
||||||
err = errRead
|
|
||||||
log.Debugf("initial read error: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
header = append(header, tmp[:n]...)
|
|
||||||
if numBytes == len(header) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var numBytesUint32 uint32
|
var numBytesUint32 uint32
|
||||||
|
@ -117,25 +111,16 @@ func (c *Comm) Read() (buf []byte, numBytes int, bs []byte, err error) {
|
||||||
log.Debug(err)
|
log.Debug(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
buf = make([]byte, 0)
|
|
||||||
|
|
||||||
// shorten the reading deadline in case getting weird data
|
// shorten the reading deadline in case getting weird data
|
||||||
if err := c.connection.SetReadDeadline(time.Now().Add(10 * time.Second)); err != nil {
|
if err := c.connection.SetReadDeadline(time.Now().Add(10 * time.Second)); err != nil {
|
||||||
log.Warnf("error setting read deadline: %v", err)
|
log.Warnf("error setting read deadline: %v", err)
|
||||||
}
|
}
|
||||||
for {
|
buf = make([]byte, numBytes)
|
||||||
// log.Debugf("bytes: %d/%d", len(buf), numBytes)
|
_, err = io.ReadFull(c.connection, buf)
|
||||||
tmp := make([]byte, numBytes-len(buf))
|
if err != nil {
|
||||||
n, errRead := c.connection.Read(tmp)
|
log.Debugf("consecutive read error: %v", err)
|
||||||
if errRead != nil {
|
return
|
||||||
err = errRead
|
|
||||||
log.Debugf("consecutive read error: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
buf = append(buf, tmp[:n]...)
|
|
||||||
if numBytes == len(buf) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,7 @@ func compress(src []byte, dest io.Writer, level int) {
|
||||||
compressor, err := flate.NewWriter(dest, level)
|
compressor, err := flate.NewWriter(dest, level)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Debugf("error level data: %v", err)
|
log.Debugf("error level data: %v", err)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
if _, err := compressor.Write(src); err != nil {
|
if _, err := compressor.Write(src); err != nil {
|
||||||
log.Debugf("error writing data: %v", err)
|
log.Debugf("error writing data: %v", err)
|
||||||
|
|
|
@ -241,6 +241,7 @@ func RandomFileName() (fname string, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
fname = f.Name()
|
fname = f.Name()
|
||||||
|
_ = f.Close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue