public int recvfrom(IPAddress addr, CPacket packet)
{
DWORD size = CPacket.m_iPktHdrSize + packet.getLength();
DWORD flag = 0;
int addrsize = (AF_INET == m_iIPversion) ? sizeof(sockaddr_in) : sizeof(sockaddr_in6);
int res = WSARecvFrom(m_iSocket, (LPWSABUF)packet.m_PacketVector, 2, &size, &flag, addr, &addrsize, null, null);
res = (0 == res) ? size : -1;
if (res <= 0)
{
packet.setLength(-1);
return -1;
}
packet.setLength(res - CPacket.m_iPktHdrSize);
// convert back into local host order
//for (int i = 0; i < 4; ++ i)
// packet.m_nHeader[i] = ntohl(packet.m_nHeader[i]);
uint* p = packet.m_nHeader;
for (int i = 0; i < 4; ++ i)
{
*p = ntohl(*p);
++ p;
}
if (packet.getFlag())
for (int j = 0, n = packet.getLength() / 4; j < n; ++ j)
*((uint *)packet.m_pcData + j) = ntohl(*((uint *)packet.m_pcData + j));
return packet.getLength();
}