in internal/remote/remote_client.go [170:222]
func (c *remotingClient) receiveResponse(r *tcpConnWrapper) {
var err error
header := primitive.GetHeader()
defer primitive.BackHeader(header)
for {
if err != nil {
// conn has been closed actively
if r.isClosed(err) {
return
}
if err != io.EOF {
rlog.Error("conn error, close connection", map[string]interface{}{
rlog.LogKeyUnderlayError: err,
})
}
c.closeConnection(r)
r.destroy()
break
}
err = r.Conn.SetReadDeadline(time.Now().Add(c.config.ReadTimeout))
if err != nil {
continue
}
_, err = io.ReadFull(r, *header)
if err != nil {
continue
}
var length int32
err = binary.Read(bytes.NewReader(*header), binary.BigEndian, &length)
if err != nil {
continue
}
buf := make([]byte, length)
_, err = io.ReadFull(r, buf)
if err != nil {
continue
}
cmd, err := decode(buf)
if err != nil {
rlog.Error("decode RemotingCommand error", map[string]interface{}{
rlog.LogKeyUnderlayError: err,
})
continue
}
c.processCMD(cmd, r)
}
}