anchor.diff:  (defmethod reconnect ((server server) &key try-again-indefinitely)
     (v:info (name server) "Reconnecting...")
     (disconnect server)
  -  (loop for result = (ignore-errors (connect server)) 
  -     do (if result
  -            (return-from reconnect server)
  -            (if try-again-indefinitely
  -                (progn
  -                  (v:warn (name server) "Reconnection failed, trying again in ~as..." (server-config server :reconnect-cooldown))
  -                  (sleep (server-config server :reconnect-cooldown)))
  -                (error 'connection-failed :server server)))))
  +  (handler-bind ((connection-failed
  +                  #'(lambda (err)
  +                      (if try-again-indefinitely
  +                          (progn
  +                            (v:warn (name server) "Reconnection failed, trying again in ~as..." (server-config server :reconnect-cooldown))
  +                            (invoke-restart 'reconnect))
  +                          (error err)))))
  +    (loop do (sleep (server-config server :reconnect-cooldown))
  +       until (with-simple-restart (reconnect "Retry connecting.") 
  +               (connect server)))))
   
   (defmacro with-reconnect-handler (servervar &body body)
     `(handler-case
  
positive.code:     (setf (gethash (name server) *servers*) server)
      (when start-thread
        (make-server-thread server '%read-thread #'read-loop)
        (make-server-thread server '%ping-thread #'ping-loop))
      server))
  
  (defmethod disconnect ((server string) &key (quit-message (config-tree :messages :quit)))
  
negative.code: 
     (%read-thread :accessor read-thread)
     (%ping-thread :accessor ping-thread)
     (%restart-thread :accessor restart-thread)
     (%socket :initarg :socket :accessor socket)
     (%stream :initarg :stream :accessor socket-stream)
     (%last-ping :initform (get-universal-time) :accessor last-ping)
  