boost asio async_read_until: как вызвать ошибку из пользовательского MatchCondition? - PullRequest
1 голос
/ 31 января 2011

Я пытаюсь оптимизировать протокол прикладного уровня, который имеет протокол смешанного режима (линейный протокол для метаинформации, рукопожатия, подтверждения и т. Д. И двоичный файл для данных). В состоянии, когда клиент ожидает ACK, я делаю

async_read_until(socket, buffer, untill_crlf_maxbytes_1024_match_condition, handler);

Где untill_crlf_maxbytes_1024_match_condition реализовано в соответствии с документом async_read_until здесь .

Здесь идея состоит в том, чтобы прочитать до CR + LF, но подождать, пока будет прочитано только 1024 байта, чтобы в случае появления чего-то похожего на привидение и, если сокет получил мусор, он не продолжал читать.

У меня вопрос: стоит ли в таком сценарии выдавать ошибку из untill_crlf_maxbytes_1024_match_condition? Как мне вызвать ошибку в этом сценарии? Если нет, то какая лучшая альтернатива?

1 Ответ

0 голосов
/ 31 января 2011

на ошибка повышения Вы имеете в виду исключение ?если это так, то это плохая идея, потому что большинство функций boost asio имеют две версии: генерирование исключений и возврат кодов ошибок.Коды ошибок очень полезны для асинхронного характера boost asio.

вы можете вернуть true из вашего match condition для всех случаев, включая ошибки.просто проверьте ошибки в вас handler

...