I'm a bit concerned with this code. If an error keeps repeating, we are going to reset and redo the whole initializing process over and over every 200ms. Also shouldn't we end up sharing code between this restart method and close? I'd expect a set of same cleanups to be done in both scenarios.
What are the typical errors that end up requiring a restart?