func (c *Connection) readFrames(_ uint32) {
	headerBuf := make([]byte, FrameHeaderSize)

	handleErr := func(err error) {
		if !c.closeNetworkCalled.Load() {
			c.connectionError("read frames", err)
		} else {
			c.log.Debugf("Ignoring error after connection was closed: %v", err)
		}
	}

	for {
		// Read the header, avoid allocating the frame till we know the size
		// we need to allocate.
		if _, err := io.ReadFull(c.conn, headerBuf); err != nil {
			handleErr(err)
			return
		}

		frame := c.opts.FramePool.Get()
		if err := frame.ReadBody(headerBuf, c.conn); err != nil {
			handleErr(err)
			c.opts.FramePool.Release(frame)
			return
		}

		c.updateLastActivity(frame)

		var releaseFrame bool
		if c.relay == nil {
			releaseFrame = c.handleFrameNoRelay(frame)
		} else {
			releaseFrame = c.handleFrameRelay(frame)
		}
		if releaseFrame {
			c.opts.FramePool.Release(frame)
		}
	}
}
func (c *Connection) readFrames(_ uint32) {
	headerBuf := make([]byte, FrameHeaderSize)

	handleErr := func(err error) {
		if !c.closeNetworkCalled.Load() {
			c.connectionError("read frames", err)
		} else {
			c.log.Debugf("Ignoring error after connection was closed: %v", err)
		}
	}

	for {
		
		
		if _, err := io.ReadFull(c.conn, headerBuf); err != nil {
			handleErr(err)
			return
		}

		frame := c.opts.FramePool.Get()
		if err := frame.ReadBody(headerBuf, c.conn); err != nil {
			handleErr(err)
			c.opts.FramePool.Release(frame)
			return
		}

		c.updateLastActivity(frame)

		var releaseFrame bool
		if c.relay == nil {
			releaseFrame = c.handleFrameNoRelay(frame)
		} else {
			releaseFrame = c.handleFrameRelay(frame)
		}
		if releaseFrame {
			c.opts.FramePool.Release(frame)
		}
	}
}
func ( c * Connection ) readFrames ( _ uint32 ) { headerBuf := make ( [ ] byte , FrameHeaderSize ) handleErr := func ( err error ) { if ! c . closeNetworkCalled . Load ( ) { c . connectionError ( " " , err ) } else { c . log . Debugf ( " " , err ) } } for { // Read the header, avoid allocating the frame till we know the size // we need to allocate. if _ , err := io . ReadFull ( c . conn , headerBuf ) ; err != nil { handleErr ( err ) return } frame := c . opts . FramePool . Get ( ) if err := frame . ReadBody ( headerBuf , c . conn ) ; err != nil { handleErr ( err ) c . opts . FramePool . Release ( frame ) return } c . updateLastActivity ( frame ) var releaseFrame bool if c . relay == nil { releaseFrame = c . handleFrameNoRelay ( frame ) } else { releaseFrame = c . handleFrameRelay ( frame ) } if releaseFrame { c . opts . FramePool . Release ( frame ) } } }
// readFrames is the loop that reads frames from the network connection and
// dispatches to the appropriate handler. Run within its own goroutine to
// prevent overlapping reads on the socket.  Most handlers simply send the
// incoming frame to a channel; the init handlers are a notable exception,
// since we cannot process new frames until the initialization is complete.
readFrames is the loop that reads frames from the network connection and dispatches to the appropriate handler . Run within its own goroutine to prevent overlapping reads on the socket . Most handlers simply send the incoming frame to a channel ; the init handlers are a notable exception since we cannot process new frames until the initialization is complete .