# File lib/activeldap/base.rb, line 268
    def Base.connection(exc=RuntimeError.new('unknown error'), try_reconnect = true)
      # Block was given! Let's safely provide access.
      if block_given?
        begin
          Timeout.alarm(@@config[:timeout]) do 
            begin
              yield @@conn
            rescue => e
              # Raise an LDAP error instead of RuntimeError or whatever
              @@logger.debug("Converting #{e} to useful exception")
              raise *LDAP::err2exception(@@conn.err) if @@conn.err != 0
              # Else reraise
              @@logger.debug('Reraising')
              raise e
            end
          end
        rescue Timeout::Error => e
          @@logger.error('Requested action timed out.')
          retry if try_reconnect and @@config[:retry_on_timeout] and Base.reconnect()
          message = e.message
          message = exc.message unless exc.nil?
          @@logger.error(message)
          raise TimeoutError, message
        rescue RuntimeError => e
          @@logger.error("#{e.class} exception occurred in connection block")
          @@logger.error("Exception message: #{e.message}")
          @@logger.error("Exception backtrace: #{e.backtrace}")
          @@logger.error(exc.message) unless exc.nil?
          retry if try_reconnect and Base.reconnect()
          raise exc unless exc.nil?
          return nil
        rescue LDAP::ServerDown => e
          @@logger.error("#{e.class} exception occurred in connection block")
          @@logger.error("Exception message: #{e.message}")
          @@logger.error("Exception backtrace: #{e.backtrace}")
          @@logger.error(exc.message) unless exc.nil?
          retry if try_reconnect and Base.reconnect()
          raise exc unless exc.nil?
          return nil
        rescue LDAP::ResultError => e
          @@logger.error("#{e.class} exception occurred in connection block")
          @@logger.error("Exception message: #{e.message}")
          @@logger.error("Exception backtrace: #{e.backtrace}")
          @@logger.error(exc.message) unless exc.nil?
          retry if try_reconnect and Base.reconnect()
          raise exc unless exc.nil?
          return nil
        rescue LDAP::UndefinedType => e
          @@logger.error("#{e.class} exception occurred in connection block")
          @@logger.error("Exception message: #{e.message}")
          @@logger.error("Exception backtrace: #{e.backtrace}")
          # Do not retry - not a connection error
          raise exc unless exc.nil?
          return nil
        # Catch all - to be remedied later
        rescue => e
          @@logger.error("#{e.class} exception occurred in connection block")
          @@logger.error("Exception message: #{e.message}")
          @@logger.error("Exception backtrace: #{e.backtrace}")
          @@logger.error("Error in catch all: please send debug log to ActiveLDAP author")
          @@logger.error(exc.message) unless exc.nil?
          raise exc unless exc.nil?
          return nil
        end
      end
      return @@conn
    end