public void Dispose()
        {
            lock (dispose_Sync)
            {
                if (disposed == true)
                {
                    return;
                }

                disposed = true;

                try
                {
                    socket.Shutdown(SocketShutdown.Both);
                    socket.Close();
                }
                finally
                {
                    client.Disconnected();
                }
            }
        }