diff --git a/connclient.go b/connclient.go index 9864a8f2..e94aab03 100644 --- a/connclient.go +++ b/connclient.go @@ -91,6 +91,7 @@ type ConnClient struct { udpRtpListeners map[int]*connClientUDPListener udpRtcpListeners map[int]*connClientUDPListener tcpFrames *multiFrame + response *base.Response receiverReportTerminate chan struct{} receiverReportDone chan struct{} @@ -135,6 +136,7 @@ func NewConnClient(conf ConnClientConf) (*ConnClient, error) { udpRtpListeners: make(map[int]*connClientUDPListener), udpRtcpListeners: make(map[int]*connClientUDPListener), tcpFrames: newMultiFrame(conf.ReadBufferCount, clientTCPFrameReadBufferSize), + response: &base.Response{}, }, nil } @@ -184,10 +186,9 @@ func (c *ConnClient) NetConn() net.Conn { func (c *ConnClient) readFrameTCPOrResponse() (interface{}, error) { frame := c.tcpFrames.next() - res := base.Response{} c.conf.Conn.SetReadDeadline(time.Now().Add(c.conf.ReadTimeout)) - return base.ReadInterleavedFrameOrResponse(frame, &res, c.br) + return base.ReadInterleavedFrameOrResponse(frame, c.response, c.br) } // ReadFrameTCP reads an InterleavedFrame. diff --git a/connserver.go b/connserver.go index ebcd2b07..25a45601 100644 --- a/connserver.go +++ b/connserver.go @@ -39,6 +39,7 @@ type ConnServer struct { br *bufio.Reader bw *bufio.Writer tcpFrames *multiFrame + request *base.Request } // NewConnServer allocates a ConnServer. @@ -58,6 +59,7 @@ func NewConnServer(conf ConnServerConf) *ConnServer { br: bufio.NewReaderSize(conf.Conn, serverReadBufferSize), bw: bufio.NewWriterSize(conf.Conn, serverWriteBufferSize), tcpFrames: newMultiFrame(conf.ReadBufferCount, clientTCPFrameReadBufferSize), + request: &base.Request{}, } } @@ -73,27 +75,24 @@ func (s *ConnServer) NetConn() net.Conn { // ReadRequest reads a Request. func (s *ConnServer) ReadRequest() (*base.Request, error) { - req := &base.Request{} - s.conf.Conn.SetReadDeadline(time.Time{}) // disable deadline - err := req.Read(s.br) + err := s.request.Read(s.br) if err != nil { return nil, err } - return req, nil + return s.request, nil } // ReadFrameTCPOrRequest reads an InterleavedFrame or a Request. func (s *ConnServer) ReadFrameTCPOrRequest(timeout bool) (interface{}, error) { frame := s.tcpFrames.next() - req := base.Request{} if timeout { s.conf.Conn.SetReadDeadline(time.Now().Add(s.conf.ReadTimeout)) } - return base.ReadInterleavedFrameOrRequest(frame, &req, s.br) + return base.ReadInterleavedFrameOrRequest(frame, s.request, s.br) } // WriteResponse writes a Response.