Содержит ли ppoll()
совокупные пакеты? У меня есть библиотека сокетов, которую я построил, которая отлично работает с низкой пропускной способностью. Однако, когда я начинаю увеличивать количество сообщений, я вижу, что размер пакета увеличивается. Я проверил размер отправителя и все пакеты, отправленные отправителем, являются правильными. Когда вызывается recv()
fucntion, пакеты начинают доходить до максимума и приводят к ошибке приложения. Любые подсказки?Совокупные пакеты ppoll?
0
A
ответ
1
ppoll()
не объединяет пакеты, но буфер приема сокета делает, и буфер отправления сокета отправляется на отправителя. Вы не можете полагаться на подсчеты приема в TCP: сообщений нет, а границы между записью у отправителя не сохраняются в приемнике. Это строго байт-поток. Любая пакетизация полностью зависит от вас.
Когда функция recv() называется пакетом, начинает превышать максимальную длину и приводит к ошибке приложения.
Только если у вас есть ошибка в коде. Типичные ошибки включают в себя:
- при условии, что
recv()
сделал или не заполнить буфер - торчащий нуль в конце буфера в нуль-прекратить его для обработки строки, которая не будет работать, если буфер был заполнен
- Предполагая, что не было ошибок, или не было конца потока
- игнорирование счета, возвращенного
recv()
в целом.