shutdown_background() killed the tokio runtime before quinn could send the CONNECTION_CLOSE frame on the wire, so the relay never knew the client left. Now use shutdown_timeout(500ms) to give quinn time to flush the close frame, matching the desktop client pattern (which uses 2s timeout). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>