public ILog Disconnect() { if (socket == null) { return(new Error("[TCP] Client cannot disconnect without a socket defined")); } if (!socket.Connected) { return(new Error("[TCP] Client tried to disconnect but socket was already closed")); } if (clientState.Connecting) { return(new Error("[TCP] Client cannot disconnect while connecting")); } if (clientState.Disconnecting) { return(new Error("[TCP] Client already disconnecting")); } if (clientState.Disconnected) { return(new Error("[TCP] Client cannot disconnect when already disconnected")); } clientState.Connected = false; clientState.Disconnected = true; socket.Shutdown(SocketShutdown.Both); socket.Close(); socket.Dispose(); socket = null; connectionHandler.HandleDisconnect(); return(null); }