NewTOAPIA.Net.Udt.CChannel.recvfrom C# (CSharp) Method

recvfrom() public method

public recvfrom ( IPAddress addr, CPacket packet ) : int
addr System.Net.IPAddress
packet CPacket
return int
        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();
        }