Обратный вызов данных CFSocket

Кто-нибудь знает, как CFSocket API читает байты из сокета в обратный вызов данных? Сначала я подумал, что нужно выполнить "скрытую" работу, чтобы всегда возвращать данные той же длины, в которой они были отправлены, но после некоторого тестирования я обнаружил, что данные возвращались порциями, если я отправлял много данных быстро, поэтому мне нужно было разбирать пакеты сам, используя заголовок.

До сих пор в тестировании я не получал никаких частичных данных (то есть, если я отправлял 1000 байтов, я всегда получаю 1000 в обратном вызове данных, но никогда не меньше), но я представляю, если буфер действительно заполнится, это может произойти, и мне придется перестраивать пакеты если бы они были неполными.

Нужно ли мне в основном использовать ту же стратегию чтения пакетов с CFSocket, которую я использовал бы с сокетами BSD, то есть префикс каждого пакета с заголовком, включающим длину, анализировать поток до длины пакета и рекомбинировать данные, если пакет был неполным при обратном вызове вызывается снова.

Спасибо!

0 ответов

Другие вопросы по тегам