I'd like to see all the retry logic be _grounded_ in a channel, and you only ever initiate the seek/open/etc process when a channel is being opened (has a packet being sent).  In that case, the open logic doesn't need any inherent retry logic, since the packet waiting in a channel will get re-tried and ultimately re-trigger another open.