|
상황 설명
1. TServerSocket을 이용하여 ServerType = stNonBlocking을 설정한 후
Listening을 시작한다.
2. 어느 모 클라이언트가 접속하고 connect가 이루어진다.
3. 모 클라이언트가 80바이트를 서버로 보낸다.
4. TServerSocket의 ReadEvent가 발생한다.
5. 이벤트 발생시 먼저 10바이트가 읽는다.
Socket->ReceiveBuf(Buffer,10);
6. 위의 이벤트 발생 루틴 내부에서 70바이트를 더 읽는다.
Socket->ReceiveBuf(Buffer+10,70);
7. 관련된 처리를 한후 이벤트 발생 루틴을 벗어난다.
8. 새로운 Read Event가 발생한다. <------------------요 부분이 문제입니다.
읽은 데이타를 조사하면 0이 나온다.
위를 보시면 네트워크 Buffer에 80바이트가 한번에 전달되었으며 ReadEvent함수에서
10바이트를 읽은후 다시 70바이트를 읽을 경우 ReadEvent가 한번 더 발생하더군요.
한번더 발생한 ReadEvent에서 Socket->ReceiveLength()의 값을 구하면, 0이 나옵니다.
즉 위의 하나더 발생한 ReadEvent는 무얼 의미하는지요??
고수님의 답변 기다리겠습니다.
ps.제 추측에는 네트워크 버퍼를 체킹하는 window자체의 Thread가 있어서
70바이트가 남아있을때 Queue에 메세지를 한번더 뿌려주는거 같은데 맞나요?
초보라서 추측만 할 뿐입니다.그럼...
|