У меня есть boost::asio::ip::tcp::socket
и вы хотите определить, содержит ли сокет данные, доступные для чтения. Я читал около available()
, однако эта функция иногда также возвращает 0
, если имеются данные (в случае, если их можно читать без блокировки). Исполняемый файл работает на Ubuntu - может быть, системный вызов может помочь?Определить количество доступных байтов в сокете
1
A
ответ
2
Поскольку вам просто нужно знать, содержит ли сокет читаемые данные, просто выпустите свой обычный неблокирующий read
из сокета. Если есть данные, вы все равно должны их прочитать, поэтому просто попробуйте прочитать.
Если вы пытаетесь избежать расходов read
, если вам нечего читать, поймите, что вы просто добавляете дополнительную операцию. Проверка наличия данных для чтения не намного дешевле, чем попытка чтения.
Конечно, только ожидающий async_read
лучше. Это позволяет реактору Boost выполнять свою работу.
Если нет данных для чтения, я бы продолжил и запомнил позже. Я знаю, что async_read также решит это, но у меня уже есть большой цикл опроса, поэтому было бы идеально, если бы был простой способ проверки доступных байтов. – Bobface
На downvoter: Почему вы сделали downvote? Могу ли я добавить более важную информацию? – Bobface
Как вы сказали, мне все нужно знать, содержит ли сокет читаемые данные. Есть ли функция для этого? – Bobface