В RFC 1122 имя того, что вы ищете, это «PUSH».
Хотя я не знаю ни одного TCP API, который реализует "PUSH".
Некоторые ответы и комментарии касаются алгоритма Nagle. Большинство из них, похоже, предполагают, что алгоритм Nagle задерживает каждую отправку. Это предположение неверно. Nagle откладывает отправку только тогда, когда предыдущий пакет еще не был подтвержден (http://www.unixguide.net/network/socketfaq/2.11.shtml).
Чтобы немного упростить это: TCP пытается отправить первый пакет (из ряда пакетов) немедленно , но задерживает последующие пакеты до тех пор, пока не истечет время ожидания или первый пакет подтверждается - в зависимости от того, что произойдет первым.
Одно из решений состоит в том, чтобы избежать этих «последующих пакетов». Если ваше приложение вызывает send () более одного раза для передачи одного составного запроса, попробуйте переписать ваше приложение. Соберите запрос в пространстве пользователя, затем позвоните send()
. Один раз.
Кроме того, когда буфер отправки содержит достаточно данных, чтобы заполнить максимальный размер сетевого пакета, Nagle также не задерживает. Это означает, что Nagle (действительно) не задерживает массовую отправку, даже если вы send()
массовые данные в маленьких кусках.