c # /. Net Socket.Shutdown

Reconozco que este tipo de pregunta tiene una larga historia, pero la forma en que la estoy utilizando debe ser la correcta '.net' y, sin embargo, no parece funcionar.

Tengo un demonio de servidor IP síncrono trivial que hace un simple AcceptSocket, hacer algunas cosas, socket.send, socket.shutdown, socket.close. Mi cliente es otra aplicación trivial de C # que hace URLDownloadToFile.

Lo que sucede es que parte del tiempo URLDownloadToFilefails falla con (0x800C0008) ... piensa que su recurso de descarga falló.

Mi secuencia final del lado del servidor es:

socket.Shutdown(Both);
socket.Close();

Si cambio esto a

socket.Disconnect();
socket.Close();

(Abro lo anterior con sockopt Linger verdadero, tiempo de espera de 5 segundos)

esto funciona muy bien.

Me falta algo en el método de apagado ... parece que la 'bala mágica' que MS quiere que uses para hacer una salida con gracia que finalmente enviará los datos de envío restantes.

Grossly, (y esto no puede ser correcto) parece que está cerca ... mata cualquier procesamiento asíncrono que pueda estar en progreso desde el apagado ().

¿Algunas ideas

Respuestas a la pregunta(2)

Su respuesta a la pregunta