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