Надеюсь, я прав с моим предположением, что данные отправляются всегда
Нет, стек TCP обычно связывает данные и отправляет большие сегменты (хотя он не ждет вечно, часто просто ненадолго) - обычно Алгоритм Наглса или какой-либо другой вариант.
Могут быть и другие проблемы, влияющие на буферизацию и отправку данных, например, насколько перегружена сеть. Как правило, стек TCP очень хорош в достижении максимальной пропускной способности, и обычно вам не следует пытаться перехитрить его.
Если вам нужна меньшая задержка, вы можете отключить алгоритм Nagle, установив опцию сокета TCP_NODELAY
int ndelay = 1;
setsockopt(sock,IPPROTO_TCP,TCP_NODELAY,(char *)&ndelay ,sizeof(ndelay));
Linux также предоставляет опозитив, возможно, ближе к тому, что вы просите, с помощью TCP_CORK.
TCP_CORK Если установлено, не отправлять
частичные кадры. Все в очереди частичное
кадры отправляются, когда опция
очищается снова. Это полезно для
предварительные заголовки перед вызовом
sendfile (2) или для пропускной способности
оптимизация. Как в настоящее время
реализовано, есть 200
потолок миллисекунды на время для
какой вывод укупорен TCP_CORK. Если
этот потолок достигнут, затем поставлен в очередь
данные автоматически передаются.
Эта опция может быть объединена с
TCP_NODELAY только начиная с Linux 2.5.71.
Эта опция не должна использоваться в коде
предназначен для переноски.