A macOS bug that causes TCP networking to stop working after 49.7 days
Comparisons to past uptime/overflow bugs
- Many relate the 49.7-day limit to classic uint32 millisecond overflows (Windows 95, Arduino, Boeing 787’s 51‑day bug, Linux scheduler bugs).
- General sentiment: this class of time/overflow bugs keeps reappearing despite being well known.
Who is affected / which macOS versions
- Several users with very long uptimes on older macOS versions (Catalina and earlier) report no issue.
- Multiple comments note the bug appears introduced in “macOS 26” (Tahoe) based on XNU source blame.
- This conflicts with the blog’s implication that “every Mac” or much older releases are affected; some call that a clear overstatement.
Observed behavior, reproduction, and diagnostics
- Reported symptom: new TCP connections eventually fail while existing ones may keep working; reboot fixes it.
- Some users think they’ve hit this on always‑on Macs (especially minis or laptops that never sleep).
- Others with >50 days uptime on recent macOS say networking is fine, suggesting it’s workload‑ and sleep‑dependent.
- Suggested checks:
netstat -an | grep TIME_WAITand watch for TIME_WAIT sockets that never expire.- Use
sysctl kern.boottimeto compute when 49.7 days elapse.
Debate over severity and real‑world impact
- Some see it as a “ticking time bomb”; others dismiss that as dramatic since a reboot (or perhaps sleep) clears it.
- Many note typical desktop behavior (short‑lived connections, browser retries) will hide the bug; long‑lived services, tunnels, DB connections are more vulnerable.
- HN crowd admits they’re more likely than average users to hit long uptimes.
Critiques of the blog post (style and correctness)
- Multiple comments say the article reads like AI‑generated: verbose, dramatic, slow to reach the point.
- Several point out technical mistakes in the wraparound explanation; the real behavior around
tcp_now, timer wrap, and TIME_WAIT seems subtler and partially misdescribed. - Some note Apple has been notified; others question the need for a long, AI‑assisted write‑up instead of a concise bug report.
Testing and design lessons
- Discussion about designing time‑based code to be testable (injectable clocks, forced early wraparound).
- Reminder: systems that rely on wraparound should trigger it soon after start in tests to catch bugs early.