[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#18527: 24.3; ERC does not reconnect when server disconnects me
From: |
Robert Brown |
Subject: |
bug#18527: 24.3; ERC does not reconnect when server disconnects me |
Date: |
Mon, 28 Dec 2015 13:18:47 -0500 |
Thanks for getting back to me about this issue. It's been several
months since I reported the reconnection problem. I have been
able to work around it by setting erc-server-error-occurred to nil
in a disconnect hook:
(add-hook 'erc-disconnected-hook
#'(lambda (nick host-name reason)
;; Re-establish the connection even if the server closed it.
(setq erc-server-error-occurred nil)))
So yes, when the root cause of the disconnection is a server error,
erc-server-error-occurred is set to true and the reconnect logic
in erc-server-reconnect-p is bypassed ... so reconnection does not
happen.
In the example I sent you, I believe the server closed the connection
and erc-server-error-occurred was set to true because of a ping
timeout.
I would prefer that erc-server-reconnect-p not check
erc-server-error-occurred so that reconnection can happen even
if the cause of the disconnect was a server error.
On Sun, Dec 27, 2015 at 3:41 PM, Lars Ingebrigtsen <larsi@gnus.org> wrote:
> Robert Brown <brown@google.com> writes:
>
>> I use ERC to connect to IRC servers. ERC's automatic reconnection
>> feature does not appear to work when the IRC server initiates the
>> disconnection. I have erc-server-reconnect-attempts set to t.
>>
>> Here is a recent example:
>>
>> *** netjoin: *.net *.split, 20 were split
>> [10:15]
>> ==> ERROR from irc.freenode.net: Closing Link: nat/google/x-onzfdymblldcwdch
>> (Ping timeout: 272 seconds)
>> [10:47]
>> *** irc.freenode.net closed
>>
>> Connection failed! Not re-establishing connection.
>>
>> *** ERC terminated: finished
>
> Can you load an uncompiled erc source and then edebug through this to
> see what it is that says that we don't want to connect?
>
> (defsubst erc-server-reconnect-p (event)
> "Return non-nil if ERC should attempt to reconnect automatically.
> EVENT is the message received from the closed connection process."
> (or erc-server-reconnecting
> (and erc-server-auto-reconnect
> (not erc-server-banned)
> (not erc-server-error-occurred)
> ;; make sure we don't infinitely try to reconnect, unless the
> ;; user wants that
> (or (eq erc-server-reconnect-attempts t)
> (and (integerp erc-server-reconnect-attempts)
> (< erc-server-reconnect-count
> erc-server-reconnect-attempts)))
> (or erc-server-timed-out
> (not (string-match "^deleted" event)))
> ;; open-network-stream-nowait error for connection refused
> (if (string-match "^failed with code 111" event) 'nonblocking t))))
>
> My guess would be erc-server-error-occurred, and in that case I wonder
> what triggered that variable to become set.
>
> --
> (domestic pets only, the antidote for overdose, milk.)
> bloggy blog: http://lars.ingebrigtsen.no