boost :: asio проблемы с чтением - PullRequest
2 голосов
/ 28 июня 2011

Я новичок в сетевом программировании в целом, поэтому, пожалуйста, потерпите меня.Я не смог найти ничего об этом в документации по бусту.При использовании asio :: async_read возникает ошибка конца файла, когда нет данных для чтения из сокета (по крайней мере, я так думаю).Есть ли способ реализовать какую-то проверку, чтобы предотвратить такое поведение?Я пытаюсь понять, есть ли способ дождаться появления данных, а затем прочитать указанные данные и вызвать обработчик?(Если это плохо сформулировано, скажите, пожалуйста. Я постараюсь уточнить.)

1 Ответ

3 голосов
/ 29 июня 2011

При использовании asio :: async_read конец Ошибка файла возникает, когда нет данные для чтения из сокета

eof возвращается, когда другая сторона сокета закрыта, а не когда нет данных для чтения.

Я пытаюсь понять: есть ли любой способ ждать, пока данные будут представить, а затем прочитать указанные данные и вызвать обработчик?

Это называется опросом, это то, что asio io_service делает для вас. Вы сообщаете io_service, что хотите прочитать данные из сокета, инициируя async_read. Он выполняет чтение от вашего имени и вызывает обработчик завершения, когда завершается успешно или безуспешно.

Возможно, стоит потратить время на изучение различий между асинхронными и синхронными методами, предлагаемыми Boost.Asio.

...