Esempio n. 1
0
      // Functionality:
      //    Read UDT options.
      // Parameters:
      //    0) [in] optName: The enum name of a UDT option.
      //    1) [in] optval: The value to be returned.
      //    2) [out] optlen: size of "optval".
      // Returned value:
      //    None.

void getOpt(UDTOpt optName, Object optval, int optlen)
{
   CGuard cg = new CGuard(m_ConnectionLock);

   switch (optName)
   {
   case UDT_MSS:
      *(int*)optval = m_iMSS;
      optlen = sizeof(int);
      break;

   case UDT_SNDSYN:
      *(bool*)optval = m_bSynSending;
      optlen = sizeof(bool);
      break;

   case UDT_RCVSYN:
      *(bool*)optval = m_bSynRecving;
      optlen = sizeof(bool);
      break;

   case UDT_CC:
      if (!m_bOpened)
         throw new CUDTException(5, 5, 0);
      *(CCC**)optval = m_pCC;
      optlen = sizeof(CCC*);

      break;

   case UDT_FC:
      *(int*)optval = m_iFlightFlagSize;
      optlen = sizeof(int);
      break;

   case UDT_SNDBUF:
      *(int*)optval = m_iSndBufSize * (m_iMSS - 28);
      optlen = sizeof(int);
      break;

   case UDT_RCVBUF:
      *(int*)optval = m_iRcvBufSize * (m_iMSS - 28);
      optlen = sizeof(int);
      break;

   case UDT_LINGER:
      if (optlen < (int)(sizeof(linger)))
         throw new CUDTException(5, 3, 0);

      *(linger*)optval = m_Linger;
      optlen = sizeof(linger);
      break;

   case UDP_SNDBUF:
      *(int*)optval = m_iUDPSndBufSize;
      optlen = sizeof(int);
      break;

   case UDP_RCVBUF:
      *(int*)optval = m_iUDPRcvBufSize;
      optlen = sizeof(int);
      break;

   case UDT_RENDEZVOUS:
      *(bool *)optval = m_bRendezvous;
      optlen = sizeof(bool);
      break;

   case UDT_SNDTIMEO: 
      *(int*)optval = m_iSndTimeOut; 
      optlen = sizeof(int); 
      break; 
    
   case UDT_RCVTIMEO: 
      *(int*)optval = m_iRcvTimeOut; 
      optlen = sizeof(int); 
      break; 

   case UDT_REUSEADDR:
      *(bool *)optval = m_bReuseAddr;
      optlen = sizeof(bool);
      break;

   case UDT_MAXBW:
      *(Int64*)optval = m_llMaxBW;
      break;

   default:
      throw new CUDTException(5, 0, 0);
   }
}
Esempio n. 2
0
        public static int setsockopt(UDTSOCKET u, int level, UDTOpt optname, Object optval, int optlen)
{
   try
   {
      CUDT udt = s_UDTUnited.lookup(u);
      udt.setOpt(optname, optval, optlen);
      return 0;
   }
   catch (CUDTException e)
   {
      s_UDTUnited.setError(new CUDTException(e));
      return ERROR;
   }
   catch (Exception e)
   {
      s_UDTUnited.setError(new CUDTException(-1, 0, 0));
      return ERROR;
   }
}
Esempio n. 3
0
      // Functionality:
      //    Configure UDT options.
      // Parameters:
      //    0) [in] optName: The enum name of a UDT option.
      //    1) [in] optval: The value to be set.
      //    2) [in] optlen: size of "optval".
      // Returned value:
      //    None.

void setOpt(UDTOpt optName, Object optval, int optlen)
{
   CGuard cg = new CGuard(m_ConnectionLock);
   CGuard sendguard = new CGuard(m_SendLock);
   CGuard recvguard = new CGuard(m_RecvLock);

   switch (optName)
   {
   case UDTOpt.UDT_MSS:
      if (m_bOpened)
         throw new CUDTException(5, 1, 0);

      if ((int)optval < (int)(28 + sizeof(CHandShake)))
         throw new CUDTException(5, 3, 0);

      m_iMSS = (int)optval;

      // Packet size cannot be greater than UDP buffer size
      if (m_iMSS > m_iUDPSndBufSize)
         m_iMSS = m_iUDPSndBufSize;
      if (m_iMSS > m_iUDPRcvBufSize)
         m_iMSS = m_iUDPRcvBufSize;

      break;

   case UDTOpt.UDT_SNDSYN:
      m_bSynSending = (bool)optval;
      break;

   case UDTOpt.UDT_RCVSYN:
      m_bSynRecving = (bool)optval;
      break;

   case UDTOpt.UDT_CC:
      if (m_bConnected)
         throw new CUDTException(5, 1, 0);
      //if (null != m_pCCFactory)
      //   delete m_pCCFactory;
      m_pCCFactory = ((CCCVirtualFactory )optval).clone();

      break;

   case UDTOpt.UDT_FC:
      if (m_bConnected)
         throw new CUDTException(5, 2, 0);

      if (*(int*)optval < 1)
         throw new CUDTException(5, 3);

      // Mimimum recv flight flag size is 32 packets
      if (*(int*)optval > 32)
         m_iFlightFlagSize = *(int*)optval;
      else
         m_iFlightFlagSize = 32;

      break;

   case UDTOpt.UDT_SNDBUF:
      if (m_bOpened)
         throw new CUDTException(5, 1, 0);

      if (*(int*)optval <= 0)
         throw new CUDTException(5, 3, 0);

      m_iSndBufSize = *(int*)optval / (m_iMSS - 28);

      break;

   case UDTOpt.UDT_RCVBUF:
      if (m_bOpened)
         throw new CUDTException(5, 1, 0);

      if (*(int*)optval <= 0)
         throw new CUDTException(5, 3, 0);

      // Mimimum recv buffer size is 32 packets
      if (*(int*)optval > (m_iMSS - 28) * 32)
         m_iRcvBufSize = *(int*)optval / (m_iMSS - 28);
      else
         m_iRcvBufSize = 32;

      // recv buffer MUST not be greater than FC size
      if (m_iRcvBufSize > m_iFlightFlagSize)
         m_iRcvBufSize = m_iFlightFlagSize;

      break;

   case UDTOpt.UDT_LINGER:
      m_Linger = *(linger*)optval;
      break;

   case UDTOpt.UDP_SNDBUF:
      if (m_bOpened)
         throw new CUDTException(5, 1, 0);

      m_iUDPSndBufSize = *(int*)optval;

      if (m_iUDPSndBufSize < m_iMSS)
         m_iUDPSndBufSize = m_iMSS;

      break;

   case UDTOpt.UDP_RCVBUF:
      if (m_bOpened)
         throw new CUDTException(5, 1, 0);

      m_iUDPRcvBufSize = *(int*)optval;

      if (m_iUDPRcvBufSize < m_iMSS)
         m_iUDPRcvBufSize = m_iMSS;

      break;

   case UDTOpt.UDT_RENDEZVOUS:
      if (m_bConnected)
         throw new CUDTException(5, 1, 0);
      m_bRendezvous = *(bool *)optval;
      break;

   case UDTOpt.UDT_SNDTIMEO: 
      m_iSndTimeOut = *(int*)optval; 
      break; 
    
   case UDTOpt.UDT_RCVTIMEO: 
      m_iRcvTimeOut = *(int*)optval; 
      break; 

   case UDTOpt.UDT_REUSEADDR:
      if (m_bOpened)
         throw new CUDTException(5, 1, 0);
      m_bReuseAddr = *(bool*)optval;
      break;

   case UDTOpt.UDT_MAXBW:
      if (m_bConnected)
         throw new CUDTException(5, 1, 0);
      m_llMaxBW = *(Int64*)optval;
      break;
    
   default:
      throw new CUDTException(5, 0, 0);
   }
}