ca582a147f
When Accept() returns a transient error, the service enters StateFailed, sleeps for the retry delay, then loops back to Accept(). Previously the state stayed StateFailed until the next successful Accept() — which could take arbitrarily long for idle services, making status observers see a stale 'error' even though the service has already reconnected and is ready. Now set StateReady (and clear lastError) immediately after the retry sleep. The redundant state transition on successful Accept is removed since recovery is handled once after the sleep.