// sendResponse send resp to client, sendResponse must be goroutine safe. func (server *Server) writeTCPResponse(wr *bufio.Writer, proto *Proto) (err error) { if Conf.Debug { log.Debug("write proto: %v", proto) } if err = ioutil.WriteBigEndianInt32(wr, int32(rawHeaderLen)+int32(len(proto.Body))); err != nil { return } if err = ioutil.WriteBigEndianInt16(wr, rawHeaderLen); err != nil { return } if err = ioutil.WriteBigEndianInt16(wr, proto.Ver); err != nil { return } if err = ioutil.WriteBigEndianInt32(wr, proto.Operation); err != nil { return } if err = ioutil.WriteBigEndianInt32(wr, proto.SeqId); err != nil { return } if proto.Body != nil { if _, err = wr.Write(proto.Body); err != nil { return } } if err = wr.Flush(); err != nil { log.Error("tcp wr.Flush() error(%v)", err) } proto.Reset() return }
// sendResponse send resp to client, sendResponse must be goroutine safe. func (server *Server) writeTCPResponse(wr *bufio.Writer, proto *Proto) (err error) { if Conf.Debug { log.Debug("write proto: %v", proto) } // if no available memory bufio.Writer auth flush response if err = ioutil.WriteBigEndianInt32(wr, int32(rawHeaderLen)+int32(len(proto.Body))); err != nil { return } if err = ioutil.WriteBigEndianInt16(wr, rawHeaderLen); err != nil { return } if err = ioutil.WriteBigEndianInt16(wr, proto.Ver); err != nil { return } if err = ioutil.WriteBigEndianInt32(wr, proto.Operation); err != nil { return } if err = ioutil.WriteBigEndianInt32(wr, proto.SeqId); err != nil { return } if proto.Body != nil { if _, err = wr.Write(proto.Body); err != nil { return } } proto.Reset() return }