Disable TCP keepalives to avoid constantly waking iOS devices#36
Merged
Conversation
Owner
|
I've also noticed an increased battery usage of the Apple Home app on iOS 17. Thanks for your pull request. |
geekman
added a commit
to geekman/hapz2m
that referenced
this pull request
Aug 8, 2023
It looks like Go has adopted 15s TCP keepalives as a default for _all_ TCP connections, which is quite dumb if you ask me. golang/go#48622 For the HAP server's side, it degrades iOS battery life significantly by waking the device every 15s to respond to these packets. In the case as a normal MQTT client, it increases traffic on top of the 60s keepalive we've already set at the application layer. In both cases, the solution is to just explicitly disable TCP keepalives. Upgrade hap to the latest version that contains the fix brutella/hap#36.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
I noticed that my iPhone battery life has been quite bad after deploying a HAP server, and under Battery Settings during an idle period it says "Home - 100%". Running
tcpdumpshows that after the initial connection, Linux starts sending TCP keepalives every 15s or so, and the phone always answers. I believe this is keeping the phone (and also my iPad) awake.HAP specifications section 6.2.3 also mentions this case specifically:
This patch prevents keepalives from being sent out, and I've verified that it's quiet now when there's no changes/updates to HAP states.