Por qué el socket lee 0 bytes cuando hay más disponibles

Descubrí que el siguiente código se repite con un uso de CPU del 100%:

byte[] buffer = new byte[0x10000];
while (true) {
    if (socket.Poll (5000000, SelectMode.SelectRead) == false)
        continue;
    int available = socket.Available;
    if (available == 0)
        return;
    int read = socket.Receive (buffer);
    Console.WriteLine ("Read: " + read + " Available: " + available);
    /* ... */
}

La salida es:

Read: 0 Available: 1
Read: 0 Available: 1
Read: 0 Available: 1
Read: 0 Available: 1
Read: 0 Available: 1
...

staba esperando el socket. Recibe el método para leer el byte restante pero aparentemente no da como resultado que mi código se repita al 100%.

Según lo sugerido por jgauffin eldocumentació lee:

Si el host remoto apaga la conexión Socket con el método de apagado, ytodos los datos disponibles se han recibido, el método de recepción se completará inmediatamente yreturn zero bytes.

Por lo tanto, la lectura 0 es algo esperado, pero solo después de leer todos los datos, qué socket no es as

Documentación para Socket.Disponible solo mencione una conexión cerrada que arroje una excepción.

¿Cómo puedo asegurarme de que se lea el último byte?

Relacionado est es una respuesta de cómo detectar una conexión cerrada que depende del zócalo. Disponible como 0 cuando no hay más datos y la conexión está cerrada,

Respuestas a la pregunta(1)

Su respuesta a la pregunta