При использовании asio :: async_read конец
Ошибка файла возникает, когда нет
данные для чтения из сокета
eof
возвращается, когда другая сторона сокета закрыта, а не когда нет данных для чтения.
Я пытаюсь понять: есть ли
любой способ ждать, пока данные будут
представить, а затем прочитать указанные данные и
вызвать обработчик?
Это называется опросом, это то, что asio io_service
делает для вас. Вы сообщаете io_service
, что хотите прочитать данные из сокета, инициируя async_read
. Он выполняет чтение от вашего имени и вызывает обработчик завершения, когда завершается успешно или безуспешно.
Возможно, стоит потратить время на изучение различий между асинхронными и синхронными методами, предлагаемыми Boost.Asio.