anchor.diff:     (properties :initarg :properties :reader server-address-properties))
     (:documentation "Represents a standard server address with a
   transport name and a table of properties."))
  +
  +(defmethod open-connection :around ((server-address standard-server-address)
  +                                    &key (if-failed :error))
  +  (with-if-failed-handler if-failed
  +    (call-next-method)))
   
   (defmethod server-address-property (name (server-address standard-server-address)
                                       &key (if-does-not-exist :error))
  
positive.code: 
  (defgeneric authenticate (authentication-mechanism connection &key if-failed)
    (:documentation "Attempt to authenticate with the server.  Return
  true if successful.
  
  IF-FAILED (default value: :ERROR) determines what to do on failure:
  
    :ERROR - signal an error.
  
    NIL - return NIL."))
  
  
  
negative.code:       (:replace
         (replace-it)))))
  
  (defun call-with-if-failed-handler (if-failed function)
    "Call FUNCTION in a context according to IF-FAILED:
  
    :ERROR - signal an error on failure.
  
    NIL - return NIL on failure."
    (ecase if-failed
      (:error (funcall function))
      ((nil) (ignore-errors (funcall function)))))
  
  (defmacro with-if-failed-handler (if-failed-form &body forms)
    "Sugar for CALL-WITH-IF-FAILED-HANDLER."
    `(call-with-if-failed-handler ,if-failed-form (lambda () ,@forms)))
  
  
  ;;;; Protocol classes and generic functions
  