2010-06-08 3 views
0

이것은 POP3 RFC에서 온 것입니다.POP3 메시지 종료 옥텟에 대한 질문

"특정 명령에 대한 응답은 멀티 라인이다. 명확 응답 및 CRLF의 첫 번째 라인을 전송 한 후, 아래에 표시된다이 경우에서, 추가 라인이 전송되며, 각각 의해 말단 CRLF 쌍. 응답의 모든 회선이 전송되면 종료 옥텟 (십진수 코드 046, ".")과 CRLF 쌍으로 구성된 최종 회선이 보내집니다. 다중 회선 응답 의 임의 회선 터미네이션 옥텟으로 시작하면 회선은 응답의 해당 줄에 에 의해 "바이트 채우기"가 완료됩니다. 따라서 멀티 회선 응답은 5 개의 옥텟 0으로 끝납니다"CRLF.CRLF" 다중 회선 응답을 검사 할 때 클라이언트는 을 검사하여 회선이 종료 옥텟으로 시작하는지 확인합니다. 그렇다면 CRLF 이외의 8 진수가 이어지면 해당 줄의 첫 번째 옥텟 ( 종료 옥텟)이 제거됩니다. CRLF 즉시 가 종료 문자를 다음 경우, 다음 POP 서버의 응답이 종료되고 ".CRLF"를 포함하는 라인이 여러 줄 응답의 일부로 간주되지 않도록합니다. "

음, 예를 들어, Gmail은 때때로 종료 옥텟을 보낸 후 다음 줄에 CRLF 쌍을 보내는 동안 나는, 이것으로 문제가 예를 들면 다음과 같습니다. 매우 드문,하지만 그렇게 분명히 내가 드릴 수 없습니다, 가끔 발생

"+OK blah blah\r\n" 
"blah blah.\r\n" 
"\r\n" 

이 경우 메시지의 끝을 결정하기 위해 '. \ r \ n'으로 구성된 행을 기대하기 때문에. 사실, Gmail은 POP3 프로토콜을 위반하거나 뭔가 잘못하고있는 중입니까? 또한 나는 두 번째 질문을 가지고 있습니다. 영어는 제 첫 언어가 아니므로 완전히 이해할 수 없습니다.

"다중 회선 응답의 어떤 줄이 종료 옥텟에서 시작되면 그 줄은"바이트 채우기 "가됩니다. 응답의 해당 회선에 종결 옥텟을 미리 보류 중임. 따라서 다중 회선 응답은 "CRLF.CRLF"다섯 개의 옥텟으로 종료됩니다. "

정확히 CRLF.CRLF가 사용되는 경우? 누군가 간단한 예제를 줄 수 있습니까? rfc는 응답의 어떤 라인이 종료 옥텟으로 시작될 때 사용된다는 것을 말합니다. 하지만 ''로 시작하는 줄은 보이지 않습니다. CRLF.CRLF로 끝나는 메시지에서. 나는 그것을 확인했다. 어쩌면 내가 뭔가를 이해하지 못하기 때문에 내가 묻는거야.

+0

그건 말이 안됩니다. CR, LF 쌍으로 인한 것이 아니라면 어떻게 '다음 선'을 가질 수 있습니까? 문제는 읽은 소켓 루틴에 있어야한다고 생각합니다. EAGAIN을 확인하고 있습니까? –

+0

나는 무엇을 의미하는지 모르겠습니다.그것들은 실제 메시지의 줄이 아니며 obviosly 실제 메시지의 줄은 CRLF 쌍으로 구분되어 종료되지만 예제는 서버의 다른 응답으로 구성됩니다. 물론, POP3 RFC에 따르면 CRLF 쌍으로 종료된다는 메시지가 있지만 실제로는 그렇지 않습니다. Gmail은 그렇게하지 않습니다. – user361633

답변

2

소켓을 읽는 데 사용하는 코드를 게시하면 도움이됩니다. 응답 인 경우

:

hello world\r\n 
we are doing fine\r\n 
..500 is same as one-half\r\n 
this is the last line\r\n 
.\r\n 

그래서 당신이 볼 수

hello world\r\n 
we are doing fine\r\n 
.500 is same as one-half\r\n 
this is the last line\r\n 

서버로 전송해야하지만이 예제와 질문의 두 번째 부분에 대답을 시도합니다 여기에 '여분의'바이트가 채워집니다. ' 그래서 '.500'은 응답의 일부로 구별 될 수 있습니다. 또한 마지막 5 옥텟은 '\ r \ n. \ r \ n'입니다.