2017-01-10 3 views
1

У меня есть boost::asio::ip::tcp::socket и вы хотите определить, содержит ли сокет данные, доступные для чтения. Я читал около available(), однако эта функция иногда также возвращает 0, если имеются данные (в случае, если их можно читать без блокировки). Исполняемый файл работает на Ubuntu - может быть, системный вызов может помочь?Определить количество доступных байтов в сокете

+0

Если нет данных для чтения, я бы продолжил и запомнил позже. Я знаю, что async_read также решит это, но у меня уже есть большой цикл опроса, поэтому было бы идеально, если бы был простой способ проверки доступных байтов. – Bobface

+0

На downvoter: Почему вы сделали downvote? Могу ли я добавить более важную информацию? – Bobface

+0

Как вы сказали, мне все нужно знать, содержит ли сокет читаемые данные. Есть ли функция для этого? – Bobface

ответ

2

Поскольку вам просто нужно знать, содержит ли сокет читаемые данные, просто выпустите свой обычный неблокирующий read из сокета. Если есть данные, вы все равно должны их прочитать, поэтому просто попробуйте прочитать.

Если вы пытаетесь избежать расходов read, если вам нечего читать, поймите, что вы просто добавляете дополнительную операцию. Проверка наличия данных для чтения не намного дешевле, чем попытка чтения.

Конечно, только ожидающий async_read лучше. Это позволяет реактору Boost выполнять свою работу.

 Смежные вопросы

  • Нет связанных вопросов^_^