disconnect
Mark this connection disconnected so any subsequent send* call fails immediately with ProtocolException instead of writing onto a stream the orchestrator is about to close. Idempotent and safe to call from the orchestrator on a self-connect, a duplicate peer-id, or a protocol error. This is the analogue of libtorrent's disconnect(...) decision point.
The underlying byte-stream/socket is owned by the orchestrator (it constructed the TcpConnection); closing it stays the orchestrator's responsibility, which also unblocks the receiveLoop's pending readExactly. This call only flips the local guard so no half-frame is written in the meantime.