Здравствуйте, AlexGin, Вы писали:
AG>Да, передавать полный размер в нвчале — также неплохая идея. Может стоит совместить это с маркером конца пакета? На случай потери промежуточных фрагментов, например.
В протоколе TCP не может быть потерянных пакетов. Восстановление последовательности выполняется на нижнем уровне.
На твоём прикладном уровне все пакеты на месте и в нужном порядке.
SVZ>>Размер кусков, вычитываемых за один раз из сокета, это вообще дело тёмное, отдано на откуп системе и с MTU никак не связано.
SVZ>>Скорость приема данных на уровне драйвера и скорость чтения прикладной программой из сокета разные, поэтому за одно чтение ты можешь зачитать сразу несколько пакетов.
AG>Следующий пакет от сервера — не приходит, пока клиент не подтвердил (не квитировал) предшествующий.
Там всё немного сложнее. Подтверждаться может не каждый пакет, а целая цепочка.
SVZ>>Максимум — ты можешь порулить размером буфера, выделяемого под сокет. В 99.9% дефолтных значений хватит за глаза.
SVZ>>А размер буфера в прикладной программе — полностью под твоим контролем, хоть по одному байту читай.
AG>Вот это интересно.
AG>Где подробнее об этом почитать? Какие ключевые слова гуглить?
setsockopt
AG>Ну и отдельный вопрос — возможно уже не к тебе — реализовано ли это как-то в Qt5?
Какая-нибудь ручка наружу обязательно торчит.