Prevent an ECONNRESET storm when accessories turn off #197
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
To prevent a fast ECONNRESET loop when turning off an accessory and turning it back on more than a few minutes later, e.g. to move and re-purpose it, did the following: In _socket.on('error') recorded the _connect() Timeout in this._socket._errorReconnect and tested that value before setting another Timeout to prevent scheduling two _connect() calls; Added _errorReconnect to the list of Timeouts cleared in _connect(); In this._socket.reconnect, incremented the Attempt Counter this._connectionAttempts just before the call to this._socket.connect(). The attempt counter was being incremented only on _connect(), not on reconnect; In _socket.on('connect'), cleared an existing pinger Timeout before setting another one; Added several DEBUG console.log statements to help trace what was happening and confirm the above changes worked.