Я реализую небольшое подмножество клиента UDS с SocketCAN на встроенном Linux. Связь между клиентом и сервером работает по шаблону запрос/ответ. Я хотел бы прочитать() ответ сервера после использования записи() для отправки запроса UDS. Проблема заключается в том, что когда в буфере приема существуют более старые данные (которые были получены до вызова write()), функция read() возвращает эти старые данные. Как я могу а) очистить входной буфер или б) определить временную метку полученных данных ответа для сравнения с временной меткой запроса? Какое самое чистое решение для этого? Поскольку read() блокируется, когда нет данных для возврата, не так просто просто прочитать фиктивное чтение, пока буфер не станет пустым. Я чувствую, что для этого должно быть простое решение, но я новичок в socket() и его друзьях...
Спасибо за вашу помощь!
select()
илиpoll()
, чтобы проверить, действительно ли сокет имеет данные для чтения. Вы также можете установить для сокета значение O_NONBLOCK с помощью fcntl, чтобы добиться неблокирующего чтения. - person tofro   schedule 22.04.2021