비동기 소켓 통신 질문입니다.

thslrtoo의 이미지

비동기 소켓 통신을 하려는데, 문제가 좀 있습니다.

while (true)
{
    recv(Header);
    PacketParse(Header);
}
 
void PacketParse(Header)
{
    if (Header == A)
    {
        recv(Body);
    }
    else if (Header == B)
    {
        recv(Body);
    }
    ....
}

서버 소스는 위와 같이 되어있습니다.
우선 Header 패킷을 받고, 헤더에 따라 분기문을 줘서 다시 데이터 부분을 받고 그에따른 처리를 하는 방식입니다.
(Header 받을때 Body 부분을 Recv 하지 않는 이유는 Header 에 따라 Body 부분의 크기(구조체)가 달라져서입니다.)

send(Header);
send(Body);

클라이언트는 이미 connect 가 되어 있다고 가정하고 위와같이 header 부분과 body 부분을 연달아 서버에게 send 합니다.
그런데 문제는 서버가 비동기 처리다보니 recv 할때 기다리지 않고 리턴을 해버리니 client 에서 패킷을 보내는 속도가 좀 늦어지면
서버는 body 부분의(서버 소스에서 PacketParse() 함수) recv 를 그냥 건너 뛰어버립니다.
이런 문제는 어떻게 해결하는게 좋을까요??
익명 사용자의 이미지

간단히 header에서 지정한 body 크기만큼 받을 때까지는 패킷을 넘기지 않으면 되겠네요.