혼합 모드 프로토콜 (메타 정보, 핸드 셰이크, 확인 응답 등의 라인 프로토콜 및 데이터의 바이너리)이있는 응용 프로그램 계층 프로토콜을 최적화하려고합니다. 클라이언트가 ACK를 기다리는 상태에서, 나는 untill_crlf_maxbytes_1024_match_condition
이 acxcording을 구현boost asio async_read_until : 사용자 정의 MatchCondition에서 오류를 발생시키는 방법은 무엇입니까?
async_read_until(socket, buffer, untill_crlf_maxbytes_1024_match_condition, handler);
을하는 here를 기록 async_read_until합니다.
여기서 아이디어는 CR + LF까지 읽을 수 있지만 1024 바이트 만 읽을 때까지 기다리는 것이므로 무시 무시한 일이 발생하고 소켓에 약간의 쓰레기가 있으면 읽기가 불가능합니다.
내 질문에이 시나리오에서 오류를 발생시키는 것이 좋습니다 untill_crlf_maxbytes_1024_match_condition
? 어떻게 그 시나리오에서 오류가 발생합니까? 최선의 대안이 아니라면?
감사합니다.하지만 연결된 문서에서 알 수 있듯이, bool 반환 값은 async_read가 중지 될 수 있는지 여부를 제안합니다. 그것은 실제로 오류가 있다는 것을 처리기에게 알려주지 않습니다. 오류로 인해 지금까지 읽은 1024 바이트에서 CR + LF를 찾을 수 없다는 것을 의미합니다. –
@CodeMedic 귀하의 처리기가 1024 바이트보다 큰'bytes_transferred' 플레이스 홀더를 기반으로 오류를 추측 할 수 있다고 생각합니다. –
@CodeMedic, @Sam Miller : 또는 다른 편리한 방법, 전역 플래그 설정 등. boost :: asio는 단지 그러한 시설을 제공하지 않습니다. –