>From 01a2aa830b73028aecf1f7dae7dadba7467a3144 Mon Sep 17 00:00:00 2001 From: "F. Jason Park" Date: Wed, 8 Mar 2023 18:04:16 -0800 Subject: [PATCH 0/1] *** NOT A PATCH *** *** BLURB HERE *** F. Jason Park (1): Add conditional erc-server-reconnect-function lisp/erc/erc-backend.el | 56 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) Interdiff: diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el index d1738e4f92d..d289df98bab 100644 --- a/lisp/erc/erc-backend.el +++ b/lisp/erc/erc-backend.el @@ -749,6 +749,9 @@ erc--server-reconnect-timeout (defun erc-server-delayed-check-reconnect (buffer) "Wait for internet connectivity before trying to reconnect. BUFFER is the server buffer for the current connection." + ;; This may appear to hang for a good while at various places + ;; because it calls wait_reading_process_output a bunch. It does at + ;; least sometimes print "Waiting for socket from ..." or similar. (with-current-buffer buffer (setq erc--server-reconnect-timeout (min 300 (* (or erc--server-reconnect-timeout @@ -763,26 +766,38 @@ erc-server-delayed-check-reconnect (erc-display-message nil 'error buffer "Nobody home...") (erc-schedule-reconnect buffer 0)))))) (condition-case _ - (make-network-process - :name "*erc-connectivity-check" - :host erc-session-server - :service erc-session-port - :nowait t - :filter - (lambda (proc _) - (delete-process proc) - (with-current-buffer buffer - (setq erc--server-reconnect-timeout nil)) - (run-at-time nil nil #'erc-server-delayed-reconnect buffer)) - :sentinel - (lambda (cproc event) - (with-current-buffer buffer - (pcase event - ("open\n" - (run-at-time nil nil #'send-string - cproc "PING *connect-check*\r\n")) - ("connection broken by remote peer\n" - (funcall reschedule cproc)))))) + (let ((proc (funcall erc-session-connector + "*erc-connectivity-check" nil + erc-session-server erc-session-port + :nowait t)) + tls-check) + (when (and (not (eq erc-session-connector + #'erc-open-network-stream)) + (process-contact proc :tls-parameters)) + (setq tls-check + (run-at-time + 1 1 (lambda (proc) + (unless (eq 'connect (process-status proc)) + (cancel-timer tls-check)) + (when (eq 'failed (process-status proc)) + (funcall reschedule proc))) + proc))) + (set-process-filter + proc (lambda (proc _) + (delete-process proc) + (with-current-buffer buffer + (setq erc--server-reconnect-timeout nil)) + (run-at-time nil nil #'erc-server-delayed-reconnect + buffer))) + (set-process-sentinel + proc (lambda (cproc event) + (with-current-buffer buffer + (pcase event + ("open\n" + (run-at-time nil nil #'send-string + cproc "PING *connect-check*\r\n")) + ("connection broken by remote peer\n" + (funcall reschedule cproc))))))) (file-error (funcall reschedule nil)))))) (defun erc-server-filter-function (process string) -- 2.39.2