Согласен. На промежуточных роутерах пакеты могут только измельчаться из-за нестыковок MTU, а склеиваться могут только в ядре принимающей стороны. И, думаю, только для stream- протоколов, таких как TCP. По этому - повторюсь. В любом случае, нельзя рассчитывать на размер отправляемого блока данных. Очевидный совет автору топика. Принимайте данные как можно бОльшими кусками, в разумных пределах, конечно. ) Это сократит количество syscalls и снизит нагрузку на ядро. А получив данные, уже можно разобраться всё получено или нет. Протокол, в простейшем случае, может выглядеть как, например, четыре байта с размером блока + сам блок данных.
|