1. Bug in CheckResponse function where ResponseType==RETR_CHECK. You lose first 512 bytes of message content while you receive first portion of the reply from socket stream. You don't cancat this part to m_MsgContents.
2. You call Receive function only once in CheckResponse. If stream contains only first part of reply at that moment you'll not receive the complete reply.
3. The length of the buffer for data is fixed. If the length of message exceed this length you'll also receive incomplete reply.