rcirc: Reconnecting after you have lost the connection

 
 4.6 Reconnecting after you have lost the connection
 ===================================================
 
 If you’re chatting from a laptop, then you might be familiar with this
 problem: When your laptop falls asleep and wakes up later, your IRC
 client doesn’t realize that it has been disconnected.  It takes several
 minutes until the client decides that the connection has in fact been
 lost.  The simple solution is to use ‘M-x rcirc’.  The problem is that
 this opens an _additional_ connection, so you’ll have two copies of
 every channel buffer, one dead and one live.
 
    The real answer, therefore, is a ‘/reconnect’ command:
 
      (with-eval-after-load 'rcirc
        (defun-rcirc-command reconnect (arg)
          "Reconnect the server process."
          (interactive "i")
          (unless process
            (error "There's no process for this target"))
          (let* ((server (car (process-contact process)))
                 (port (process-contact process :service))
                 (nick (rcirc-nick process))
                 channels query-buffers)
            (dolist (buf (buffer-list))
              (with-current-buffer buf
                (when (eq process (rcirc-buffer-process))
                  (remove-hook 'change-major-mode-hook
                               'rcirc-change-major-mode-hook)
                  (if (rcirc-channel-p rcirc-target)
                      (setq channels (cons rcirc-target channels))
                    (setq query-buffers (cons buf query-buffers))))))
            (delete-process process)
            (rcirc-connect server port nick
                           rcirc-default-user-name
                           rcirc-default-full-name
                           channels))))