Socket "Flush" habilitando temporalmente NoDelay

Fond

Tengo una implementación de un servidor HTTP en C #. Utilizando ab Descubrí un problema de rendimiento extraño. Cada solicitud tomó 5 ms con Keep-Alive desactivado pero 40 ms con Keep-Alive activado!

La página de prueba se genera en un solo byte [] que se envía como respuesta utilizando un solo socket. Enviar llamada.

La causa es, por lo que puedo decir, el algoritmo de Nagle utilizado en la pila TCP.

TCP Flush?

Hasta ahora estoy usando elSin demor propiedad al final de cada solicitud HTTP atendida.

socket.NoDelay = true;
socket.NoDelay = false;

Que resuelve el problema por ahora. Pero no tengo documentación para respaldar mi descubrimiento.

Esto fue probado en un sistema linux / mono.

Existe una forma estándar de vaciar la conexión TCP?

Relacionad

Esta respuesta está abordando el mismo problema. La diferencia aquí es que solo estoy buscando deshabilitar temporalmente el algoritmo.

Respuestas a la pregunta(4)

Su respuesta a la pregunta