Reconnect to discoverd when the connection drops

We could compare the client pointer when we go to reconnect so if reconnect gets called multiple times, the first will acquire a lock and reconnect and then the subsequent attempts will see that the client is different after they acquire the lock and return immediately.