Описанный тобой механиз выглядит вполне себе рабочим. Как мне думается, у тебя есть два пути оптимизации простоя при неожиданном разрыве соединения.
Первый путь — уменьшать аймауты в течении которых клиент говорит серверу что он все еще жив. Тут еще можно воспользоваться тем, что операция с сервером так же продлевает жизнь сеанса.
Второй путь — иметь постоянное соединение с сервером и в случае прихода запроса авторизации от нового клиента сервер должен проверить а не отвалился ли клиент.
Лично мне больше нравится второй путь, а с учетом того, что исходя из описания твоего протокола тебе нужно поддерживать максимум одно дополнительное соединение с сервером, то каких-то аргументов против не видно.