2015-03-12 10 views
0

Содержит ли ppoll() совокупные пакеты? У меня есть библиотека сокетов, которую я построил, которая отлично работает с низкой пропускной способностью. Однако, когда я начинаю увеличивать количество сообщений, я вижу, что размер пакета увеличивается. Я проверил размер отправителя и все пакеты, отправленные отправителем, являются правильными. Когда вызывается recv() fucntion, пакеты начинают доходить до максимума и приводят к ошибке приложения. Любые подсказки?Совокупные пакеты ppoll?

ответ

1

ppoll() не объединяет пакеты, но буфер приема сокета делает, и буфер отправления сокета отправляется на отправителя. Вы не можете полагаться на подсчеты приема в TCP: сообщений нет, а границы между записью у отправителя не сохраняются в приемнике. Это строго байт-поток. Любая пакетизация полностью зависит от вас.

Когда функция recv() называется пакетом, начинает превышать максимальную длину и приводит к ошибке приложения.

Только если у вас есть ошибка в коде. Типичные ошибки включают в себя:

  • при условии, что recv() сделал или не заполнить буфер
  • торчащий нуль в конце буфера в нуль-прекратить его для обработки строки, которая не будет работать, если буфер был заполнен
  • Предполагая, что не было ошибок, или не было конца потока
  • игнорирование счета, возвращенного recv() в целом.