Boost.asio, async_read и тип сокета

У меня есть приложение клиент / сервер, которое пытается прочитать. При чтении с клиента это делается асинхронно. Кажется, что async_read на стороне клиента терпит неудачу.

Я думаю, что мой клиент пытается async_read, прежде чем сервер выполняет соответствующий async_write (не совсем уверен). Так что мои вопросы здесь являются концептуальными:

  1. я могу async_read до того, как соответствующий async_write для сокета на стороне сервера был сделан?
  2. Я не уверен (не могу попробовать прямо сейчас), но кажется, что тип сокета (блокирующий / неблокирующий) меняет поведение 1.
  3. В случае, если я хочу использовать неблокирующие сокеты, как я могу async_read, когда я знаю, что есть доступные данные? Является ли bytes_readable или похожим, что я ищу?

Большое спасибо. Я был бы признателен за подтверждение моих 3 вопросов, так как я пробовал много вещей некоторое время, и у меня мало времени, чтобы попробовать дальнейшие эксперименты.

0

Решение

  1. я могу async_read до того, как соответствующий async_write для сокета на стороне сервера был сделан?

Да.

  1. Я не уверен (не могу попробовать прямо сейчас), но кажется, что тип сокета (блокирующий / неблокирующий) меняет поведение 1.

Вполне возможно, но вы не должны переводить сокет в неблокирующий режим. Асинхронный ввод-вывод — это третья модель ввода-вывода, не имеющая ничего общего с неблокирующим режимом.

  1. В случае, если я хочу использовать неблокирующие сокеты, как я могу async_read, когда я знаю, что есть доступные данные?

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector