func()

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