C'è una certa quantità di spese generali per scrivere in un socket di rete e inviare dati. Se i dati sono stati inviati ogni volta che il byte è entrato nel socket, si otterrebbero 40+ byte di intestazione TCP per ogni byte di dati effettivi. (Supponendo che tu stia utilizzando un socket TCP, naturalmente. Altri socket avranno valori diversi). Al fine di evitare tale inefficienza, il socket mantiene un buffer locale, che di solito è un po 'più di 1000 byte. Quando il buffer viene riempito, un'intestazione viene avvolta attorno ai dati e il pacchetto viene inviato alla sua destinazione.
In molti casi, non è necessario inviare immediatamente ciascun pacchetto; se stai trasferendo un file, i dati iniziali potrebbero non essere di alcuna utilità senza i dati finali del file, quindi funziona bene. Se è necessario forzare l'invio immediato dei dati, tuttavia, lo scarico del buffer invierà tutti i dati che non sono ancora stati inviati.
Si noti che quando si chiude un socket, si scaricano automaticamente i dati rimanenti, quindi non è necessario svuotare prima di chiudere.
fonte
2009-05-27 06:51:35
come si lega NAGL a questo, sai? – rogerdpack
ottima risposta .... – goh