Exemplo de soquete de servidor assíncrono da Microsofts

Eu tenho uma pergunta sobreesta question ("Servidor assíncrono com soquete de vários clientes").

A Microsoft mudouo exemplo desde que o Groos responde ou eu realmente não entendo - no exemplo diz:

        while (true) {
            // Set the event to nonsignaled state.
            allDone.Reset();

            // Start an asynchronous socket to listen for connections.
            Console.WriteLine("Waiting for a connection...");
            listener.BeginAccept( 
                new AsyncCallback(AcceptCallback),
                listener );

            // Wait until a connection is made before continuing.
            allDone.WaitOne();
        }

Pelo que entendi, a função BeginAccept () é chamada contiuously no loop while (true), sendo interrompida apenas e até que a função AcceptCallback () seja chamada, porque a primeira coisa que acontece lá é allDone.Set ().

Mas Groo disse

O problema com o exemplo do MSDN é que ele permite a conexão de apenas um cliente (o listener.BeginAccept é chamado apenas uma vez).

E, na verdade, eu não entendo por que o ManualResetEventtudo feito é usado em tudo ... E eu pensei que o método listener.EndAccept (ar) está bloqueando de qualquer maneira.

Listener.BeginAccept () está lançando uma exceção se for chamado pela segunda vez enquanto ainda estiver em execução? Mas se sim, por que allDone.Set () está antes de listener.EndAccept (ar)?

E outra pergunta:

Posso apenas chamar handler.BeginReceive (...), na função ReadCallback (IAsyncResult ar) depois que recebi umEOF, aguardar mais dados recebidos do mesmo cliente?

Alguém com mais experiência pode me explicar isso, por favor?

Obrigado !

questionAnswers(2)

yourAnswerToTheQuestion