Эффект TCP_CORK - PullRequest
       31

Эффект TCP_CORK

2 голосов
/ 29 сентября 2011

У меня есть случай использования, когда я отправляю данные через TCP / IP в одном направлении.Я делаю это с помощью нескольких send() -колланов с очень маленькими (по отношению к размеру кадра Ethernet) полезными нагрузками (без каких-либо флагов для send() -колл).Чтобы предотвратить раздувание моих маленьких пакетов полезной нагрузки до размера полного кадра Ethernet, я подумал, что было бы неплохо использовать опцию сокета TCP_CORK.Это работает, но, сравнивая ситуацию до и после использования TCP_CORK, я заметил, что этот тип агрегации уже выполнен.Почему это так?Как я уже сказал, я не использую никаких флагов для send() (например, MSG_MORE) или других опций сокетов, поэтому я ожидал, что мое оригинальное решение будет расточительным.

1 Ответ

2 голосов
/ 29 сентября 2011

Если вы отправляете сообщения очень быстро, возможно, вы видите алгоритм Nagle в работе. Вы должны отключить это явно. Iirc в Linux вы должны установить TCP_NODELAY, но есть другие варианты в других операционных системах.

...