def pipeline_next_responses
        reconnect_on_pipeline_complete!
        values = {}

        response_buffer.read

        status, cas, key, value = response_buffer.process_single_getk_response
        # status is not nil only if we have a full response to parse
        # in the buffer
        until status.nil?
          # If the status is ok and key is nil, then this is the response
          # to the noop at the end of the pipeline
          finish_pipeline && break if status && key.nil?

          # If the status is ok and the key is not nil, then this is a
          # getkq response with a value that we want to set in the response hash
          values[key] = [value, cas] unless key.nil?

          # Get the next response from the buffer
          status, cas, key, value = response_buffer.process_single_getk_response
        end

        values
      rescue SystemCallError, *TIMEOUT_ERRORS, EOFError => e
        @connection_manager.error_on_request!(e)
      end
Attempt to receive and parse as many key/value pairs as possible
from this server. After #pipeline_response_setup, this should be invoked
repeatedly whenever this server's socket is readable until
#pipeline_complete?.

Returns a Hash of kv pairs received.