У меня есть приложение клиент / сервер, которое пытается прочитать. При чтении с клиента это делается асинхронно. Кажется, что async_read на стороне клиента терпит неудачу.
Я думаю, что мой клиент пытается async_read, прежде чем сервер выполняет соответствующий async_write (не совсем уверен). Так что мои вопросы здесь являются концептуальными:
Большое спасибо. Я был бы признателен за подтверждение моих 3 вопросов, так как я пробовал много вещей некоторое время, и у меня мало времени, чтобы попробовать дальнейшие эксперименты.
- я могу async_read до того, как соответствующий async_write для сокета на стороне сервера был сделан?
Да.
- Я не уверен (не могу попробовать прямо сейчас), но кажется, что тип сокета (блокирующий / неблокирующий) меняет поведение 1.
Вполне возможно, но вы не должны переводить сокет в неблокирующий режим. Асинхронный ввод-вывод — это третья модель ввода-вывода, не имеющая ничего общего с неблокирующим режимом.
- В случае, если я хочу использовать неблокирующие сокеты, как я могу async_read, когда я знаю, что есть доступные данные?
Это противоречие в терминах. Асинхронный ввод-вывод запускает операцию и обеспечивает рандеву после ее завершения. Сама операция остается блокирующей, но не для асинхронного вызова. Если вы хотите использовать неблокирующие сокеты, вы также не должны пытаться использовать асинхронный ввод-вывод.
Других решений пока нет …