Suggestion for BPUP: The timeout counter should be reset when each status message is sent. If that were the case, I could listen for with some pre-described timeout, say the suggested 60 seconds, and if the listen timesout, I could simply send the keep-alive and loop. If I get a status message back before the timeout, I could process the status message and loop, knowing that I still had (at least) the full 60 seconds before it would time out.
As it works now, I have to set my timeout to some sub-interval of the keep-alive time (say 20 seconds), and every time the listen comes back, whether with a status message or a timeout, I have to check the time of the last keep-alive message and calculate whether the keep-alive interval has expired, send the new keep-alive, store the time for the latest keep-alive, process any status message, all before I can loop back to the listen. Doable yes, but unnecessarily more complex than the simplicity of just letting the listen timeout be the timer for the need for a new keep-alive message.