Merge pull request #385 from nuss-justin/master

Avoid some allocations in recvMsg
This commit is contained in:
Qi Zhao
2015-10-06 22:39:18 -07:00

View File

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