better reconnect with keepAlive, noDelay and error recovery