Hay una cierta cantidad de gastos generales involucrados al escribir en un socket de red y enviar datos. Si se envían datos cada vez que se ingresa byte en el socket, terminaría con más de 40 bytes de encabezado TCP por cada byte de datos reales. (Suponiendo que está usando un socket TCP, por supuesto. Otros sockets tendrán diferentes valores). Para evitar tal ineficiencia, el socket mantiene un búfer local, que suele ser algo más de 1000 bytes. Cuando se completa ese búfer, se envuelve un encabezado alrededor de los datos y el paquete se envía a su destino.
En muchos casos, no necesita que cada paquete se envíe inmediatamente; Si está transfiriendo un archivo, es posible que los datos iniciales no sirvan sin los datos finales del archivo, por lo que esto funciona bien. Sin embargo, si necesita forzar que los datos se envíen inmediatamente, al enjuagar el búfer se enviarán los datos que aún no se hayan enviado.
Tenga en cuenta que cuando cierra un socket, se vacía automáticamente cualquier información remanente, por lo que no es necesario enjuagar antes de cerrar.
¿Cómo se relaciona NAGL con esto, sabes? – rogerdpack
gran respuesta .... – goh