Если клиент предоставляет слишком маленький буфер, как узнать, сколько данных нужно отбросить? Есть ли в данных что-то, что говорит вам, когда вы достигли конца сообщения, которое нужно удалить? Если это так, то вам нужно буферизовать входной поток в вашем коде, чтобы вы могли обнаружить эти границы. Если ваш код видит поток как недифференцированные байты, тогда ваш вопрос не имеет смысла, так как ваш код в принципе не может знать, когда прекратить отбрасывать данные. С потоками TCP, если нет встроенного протокола, который разделяет «сообщения», то все или ничего до тех пор, пока соединение не будет закрыто.

у интерфейс под Linux, который получает данные из сокета TCP. Пользователь предоставляет буфер, в котором хранятся полученные данные. Если предоставленный буфер слишком мал, я просто хочу вернуть сообщение об ошибке. Первая проблема состоит в том, чтобы определить, был ли буфер малым. Функция recv () просто возвращает мне количество байтов, фактически записанных в буфер. Если я использую флаг MSG_TRUNC, указанный на man-странице recv (), он все равно возвращает мне то же самое. Вторая проблема - сбросить данные, все еще находящиеся в очереди в сокете. Так что, если я решу, что мой предоставленный буфер был маленьким, я просто хочу стереть все, что осталось в сокете. Есть ли другие способы сделать это, кроме как снова закрывать и открывать сокет или просто получать, пока ничего не останется? С наилучшими пожеланиями <

Одно из предложений состояло в том, чтобы просто recv, пока ничего не осталось (я получаю 0) - но не закончится ли это тем, что нужно ждать заданное время ожидания (в данном случае это 5 секунд?), Потому что каждый раз, когда я вызываю recv, оно ожидает данные или время ожидания ?

Ответы на вопрос(2)

Ваш ответ на вопрос