Skip to content

feat: add dynamic interface management to handle network disconnects#4

Merged
sthelen-enqs merged 4 commits intodevfrom
feature/dynamic-interface-management
Feb 23, 2026
Merged

feat: add dynamic interface management to handle network disconnects#4
sthelen-enqs merged 4 commits intodevfrom
feature/dynamic-interface-management

Conversation

@DerAndereAndi
Copy link
Member

This change fixes infinite warning logs when network interfaces disconnect
during mDNS operations. Previously, the code would continue attempting to
send to disconnected interfaces, generating warnings on every attempt.

Key changes:

  • Add InterfaceManager to track active/failed interfaces with adaptive backoff
  • Add error classification (isInterfaceGone) to detect interface failures
  • Update Client and Server to use InterfaceManager for dynamic iteration
  • Fix Windows conn wrappers to return errors instead of logging them
  • Add integration tests that simulate the original disconnect scenario

The fix uses separate IPv4/IPv6 managers to prevent cross-protocol failure
cascades. When an interface fails with ENXIO, ENETDOWN, or similar errors,
it's immediately removed from the active set. Recovery is attempted with
adaptive backoff (1s, 5s, 30s) when interfaces reappear.

This required the PR #3
It fixes #1

@kirollosnct
Copy link
Member

Hello,

The CPU spinning bug and warning spam appear to be resolved, and everything has been running smoothly overall.

I have a question regarding the recovered interfaces in server.go: once an interface is recovered, why don't we attempt to reconnect to it; similar to the client?

@DerAndereAndi
Copy link
Member Author

This is an oversight. Please feel free to add it :)

@kirollosnct
Copy link
Member

kirollosnct commented Feb 10, 2026

I added another change to handle a case in the zeroconf client. The issue was that If the network interface is only limited to either IPv4/IPv6, the client would return an error and does not continue the setup with the available protocol.

@kirollosnct kirollosnct force-pushed the feature/dynamic-interface-management branch from e091eb5 to d18b5a6 Compare February 18, 2026 11:22
DerAndereAndi and others added 4 commits February 23, 2026 12:42
This change fixes infinite warning logs when network interfaces disconnect
during mDNS operations. Previously, the code would continue attempting to
send to disconnected interfaces, generating warnings on every attempt.

Key changes:
- Add InterfaceManager to track active/failed interfaces with adaptive backoff
- Add error classification (isInterfaceGone) to detect interface failures
- Update Client and Server to use InterfaceManager for dynamic iteration
- Fix Windows conn wrappers to return errors instead of logging them
- Add integration tests that simulate the original disconnect scenario

The fix uses separate IPv4/IPv6 managers to prevent cross-protocol failure
cascades. When an interface fails with ENXIO, ENETDOWN, or similar errors,
it's immediately removed from the active set. Recovery is attempted with
adaptive backoff (1s, 5s, 30s) when interfaces reappear.
- Add missing multicast join in server syncInterfaces() to reactivate
recovered interfaces and backoff on failures.
- Add client/server unit tests covering join multicast groups success
and failure paths
@sthelen-enqs sthelen-enqs force-pushed the feature/dynamic-interface-management branch from d18b5a6 to a71a40e Compare February 23, 2026 11:44
@sthelen-enqs sthelen-enqs merged commit 96b346b into dev Feb 23, 2026
7 of 8 checks passed
@sthelen-enqs sthelen-enqs deleted the feature/dynamic-interface-management branch February 23, 2026 11:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Failed to set multicast interface: no such interface

4 participants