public static void Disconnect(ClientConnection clientConnection)
        {
            if (!clientConnection.Destructed)
            {
                bool removed = ClientConnectionManager.Remove(clientConnection);

                if (removed)
                {
                    clientConnection.Destruct();
                }
            }
        }
        private void OnAccept(object sender, SocketAsyncEventArgs args)
        {
            if (args.SocketError == SocketError.Success)
            {
                Socket socket = args.AcceptSocket;
                SocketAsyncEventArgs receiveAsyncEventArgs = new SocketAsyncEventArgs();

                receiveAsyncEventArgs.SetBuffer(new byte[TcpServerSocket.RECEIVE_BUFFER_SIZE], 0, TcpServerSocket.RECEIVE_BUFFER_SIZE);
                receiveAsyncEventArgs.Completed += TcpServerSocket.OnReceive;

                ClientConnection clientConnection = ClientConnectionManager.Create(socket, receiveAsyncEventArgs);

                receiveAsyncEventArgs.UserToken = clientConnection;

                if (!socket.ReceiveAsync(receiveAsyncEventArgs))
                {
                    TcpServerSocket.OnReceive(null, receiveAsyncEventArgs);
                }
            }

            this.StartAccept(args);
        }