A failed outbound dial left PeerActor in Connecting, so check_connection_status re-fired the 20-second timeout error on every 100ms tick until the actor was stopped. ServerActor had the same bug: its disconnect paths only cleared state when already Connected. Reset connection_state to Disconnected in all four disconnect paths. Fixes #31