code: func (c *Connection) reader(r io.Reader) {
  	buf := bufio.NewReader(r)
  	frames := &reader{buf}
  	conn, haveDeadliner := r.(readDeadliner)
  
  	for {
  		frame, err := frames.ReadFrame()
  
  		if err != nil {
  			c.shutdown(&Error{Code: FrameError, Reason: err.Error()})
  			return
  		}
  
  		c.demux(frame)
  
  		if haveDeadliner {
  			c.deadlines <- conn
  		}
  	}
  }
docs: // Reads each frame off the IO and hand off to the connection object that
  // will demux the streams and dispatch to one of the opened channels or
  // handle on channel 0 (the connection channel).