Merge pull request #385 from nuss-justin/master
Avoid some allocations in recvMsg
This commit is contained in:
13
rpc_util.go
13
rpc_util.go
@ -139,10 +139,21 @@ type msgFixedHeader struct {
|
|||||||
// EOF is returned with nil msg and 0 pf if the entire stream is done. Other
|
// EOF is returned with nil msg and 0 pf if the entire stream is done. Other
|
||||||
// non-nil error is returned if something is wrong on reading.
|
// non-nil error is returned if something is wrong on reading.
|
||||||
func (p *parser) recvMsg() (pf payloadFormat, msg []byte, err error) {
|
func (p *parser) recvMsg() (pf payloadFormat, msg []byte, err error) {
|
||||||
|
const (
|
||||||
|
headerSize = 5
|
||||||
|
formatIndex = 1
|
||||||
|
)
|
||||||
|
|
||||||
var hdr msgFixedHeader
|
var hdr msgFixedHeader
|
||||||
if err := binary.Read(p.s, binary.BigEndian, &hdr); err != nil {
|
var buf [headerSize]byte
|
||||||
|
|
||||||
|
if _, err := io.ReadFull(p.s, buf[:]); err != nil {
|
||||||
return 0, nil, err
|
return 0, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hdr.T = payloadFormat(buf[formatIndex])
|
||||||
|
hdr.Length = binary.BigEndian.Uint32(buf[formatIndex:])
|
||||||
|
|
||||||
if hdr.Length == 0 {
|
if hdr.Length == 0 {
|
||||||
return hdr.T, nil, nil
|
return hdr.T, nil, nil
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user