int SSClient::RecvMsg( Packet & packet) { DataBuffer * buff = packet.GetBuffer(); //消息头接收 int iRecv = SockRecv( buff->GetWritePtr(), PACKET_HEADER_LENGTH); if( iRecv < 0 || iRecv != PACKET_HEADER_LENGTH ) return -1; //移动 写指针 buff->MoveWritePtr(iRecv); //解包头 packet.UnpackHeader(); //包体长度 int iLeft = packet.Length- PACKET_HEADER_LENGTH; if( 0 == iLeft ) return 0; //消息体接收 iRecv = SockRecv( buff->GetWritePtr(), iLeft ); if( iRecv != iLeft ) return -1; //移动 写指针 buff->MoveWritePtr(iRecv); return 0; }