Как узнать длину принимаемого сообщения на сетевых сокетах?
Здравствуйте! Как определить длину входящего сообщения на блокируемом сокете? Я не совсем дурачек! и по этому функцию read() помещаю в цикл с параметром - len равным максимальному размеру буфера, за одну итерацию приходит намного меньше len. Как отгадать размер, int r=read(); в сообщения не лазя, если r вернет -1 или r вернет 0?
Длина входящего сообщения определяется используемым протоколом.
В HTTP, например, для этого используется заголовок Content-Length.
А вот в протоколе RESP (Redis) длина сообщения указана в первом байте этого сообщения.
В каком-нибудь другом протоколе - длина сообщения фиксированная.
В соответствии с правилами используемого протокола и надо читать из сокета данные.
Ну дак а если я буду до упоротости читать данные не заглядывая в структуру данных, что должна вернуть функция чтения в окончании данных? Не знаете? Конечно безопасности это может повредить если нет ограничений в цикле!