anchor.diff:      (terminate-server-thread '%read-thread)
       (terminate-server-thread '%ping-thread))
   
  -  (ignore-errors 
  -    (with-accessors ((socket socket)) server
  -      (when socket
  -        (v:info (name server) "Disconnecting...")
  -        (irc:quit :quit-message (or quit-message "#1=(quit . #1#)") :server server))
  -      (setf socket NIL)))
  +  (when (socket server)
  +    (v:info (name server) "Disconnecting...")
  +    (irc:quit :quit-message (or quit-message "#1=(quit . #1#)") :server server)
  +    (finish-output (socket-stream server))
  +    (close (socket-stream server))
  +    (usocket:socket-close (socket server)))
  +  (setf (socket server) NIL)
     (remhash (name server) *servers*))
   
   (defmethod reconnect ((server symbol) &key try-again-indefinitely)
  
positive.code: (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)))))
  
  (defmacro with-reconnect-handler (servervar &body body)
    `(handler-case
  
negative.code:         (make-server-thread ,servervar '%restart-thread
                              #'(lambda () 
                                  (sleep (server-config ,servervar :reconnect-cooldown))
                                  (reconnect ,servervar :try-again-indefinitely T)))))
       (disconnect (e)
         (declare (ignore e))
         (v:warn (name ,servervar) "Leaving reconnect-handler due to disconnect condition..."))
  