# File lib/bunny/client09.rb, line 144
                def next_frame(opts = {})
      frame = nil
                        
                        case
                                when channel.frame_buffer.size > 0
                                        frame = channel.frame_buffer.shift
                                when opts.has_key?(:timeout)
                Timeout::timeout(opts[:timeout], Qrack::ClientTimeout) do
                  frame = Qrack::Transport09::Frame.parse(buffer)
                end
              else
                frame = Qrack::Transport09::Frame.parse(buffer)
      end
                        
                        @logger.info("received") { frame } if @logging
                                                
                        raise Bunny::ConnectionError, 'No connection to server' if (frame.nil? and !connecting?)
                        
                        # Monitor server activity and discard heartbeats
                        @message_in = true
                        
                        case
                                when frame.is_a?(Qrack::Transport09::Heartbeat)
                                        next_frame(opts)
                                when frame.nil?
                                        frame
                                when ((frame.channel != channel.number) and (frame.channel != 0))
                                        channel.frame_buffer << frame
                                        next_frame(opts)
                                else
                                        frame
                        end
                        
    end