/// <summary> /// Disconnect this connection /// </summary> public virtual void Disconnect() { // send a disconnect message and disconnect if (open && socket.Connected) { try { SendAsync(Goodby).Forget(); kcp.Flush(); } catch (SocketException) { // this is ok, the connection was already closed } catch (ObjectDisposedException) { // this is normal when we stop the server // the socket is stopped so we can't send anything anymore // to the clients // the clients will eventually timeout and realize they // were disconnected } } open = false; // EOF is now available dataAvailable?.TrySetResult(); }