.changelog/3569.md
actor DSUSocket for async UDP transport,
and Bonjour service advertisement/discovery via DSUServiceAdvertiser / DSUServiceBrowser.
Supports iOS, tvOS, macOS, Mac Catalyst, visionOS, and watchOS.<Caches>/PVControllerDSU/
on every platform; prevents accidental use of the Documents directory (which is restricted on tvOS).
Covered by DSUFileStorageTests with assertions that the URL is never inside Documents.NWListener initialisation errors are now consistently
thrown as DSUSocketError.listenerFailed instead of propagating raw NWError values.startListening() installs a stateUpdateHandler
that calls close() when the listener reaches a terminal .failed state, ensuring pending
receive() calls are woken up rather than hanging indefinitely.stateUpdateHandler
to evict themselves from the connection dictionary on .failed / .cancelled, complementing the
existing receive-loop cleanup.