2011-01-31 4 views
1

혼합 모드 프로토콜 (메타 정보, 핸드 셰이크, 확인 응답 등의 라인 프로토콜 및 데이터의 바이너리)이있는 응용 프로그램 계층 프로토콜을 최적화하려고합니다. 클라이언트가 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? 어떻게 그 시나리오에서 오류가 발생합니까? 최선의 대안이 아니라면?

답변

0

오류 발생예외를 던집니다.? if 부스트 asio의 대부분의 기능은 두 가지 버전 : 예외를 던지고 오류 코드를 반환하기 때문에 나쁜 생각입니다. 오류 코드는 비동기 성향의 boost asio에 매우 유용합니다.

오류를 포함하여 모든 경우에 대해 match condition에서 true을 반환 할 수 있습니다. 당신의 에러를 확인하십시오. handler

+0

감사합니다.하지만 연결된 문서에서 알 수 있듯이, bool 반환 값은 async_read가 중지 될 수 있는지 여부를 제안합니다. 그것은 실제로 오류가 있다는 것을 처리기에게 알려주지 않습니다. 오류로 인해 지금까지 읽은 1024 바이트에서 CR + LF를 찾을 수 없다는 것을 의미합니다. –

+0

@CodeMedic 귀하의 처리기가 1024 바이트보다 큰'bytes_transferred' 플레이스 홀더를 기반으로 오류를 추측 할 수 있다고 생각합니다. –

+0

@CodeMedic, @Sam Miller : 또는 다른 편리한 방법, 전역 플래그 설정 등. boost :: asio는 단지 그러한 시설을 제공하지 않습니다. –

관련 문제