Send

Send 方法用于从连接端口发出数据。此操作受线程保护。

特征符
int RiCOSConnectionPort_Send(
   RiCOSConnectionPort *const me, struct RiCSData *m);
参数
me

这是要从中发送数据的 RiCOSConnectionPort 对象

m

这是要从端口发送的数据

返回

一个整数,表示通过套接字发送的字节数

示例
RiCOSResult RiCOSConnectionPort_Send(
   RiCOSConnectionPort * const me, struct RiCSData *m)
{
   int rv = 0, m_NumberOfMessagesBetweenAck = 0;
   RiCOSMutex_lock(&me->m_SendMutex);

   if (me->m_Connected) {
      char lenStr[MAX_LEN_STR+1];
      (void)sprintf(lenStr,"%d",RiCSData_getLength(m));
      rv = RiCOSSocket_send(&me->m_Socket,
         lenStr, MAX_LEN_STR);
      if (rv > 0) {
         rv = RiCOSSocket_send(&me->m_Socket,
         RiCSData_getRawData(m), RiCSData_getLength(m));
      }
      if (me->m_ShouldWaitForAck) {
         const int maxNumOfMessagesBetweenAck = 127; 
         /* This MUST match the number in Rational Rhapsody. */
         if (maxNumOfMessagesBetweenAck > 0) {
            m_NumberOfMessagesBetweenAck++;
            if (m_NumberOfMessagesBetweenAck >= 
               maxNumOfMessagesBetweenAck) {
                  m_NumberOfMessagesBetweenAck = 0;
                  RiCOSEventFlag_wait(
                     &me->m_AckEventFlag, -1);
                  RiCOSEventFlag_reset(
                     &me->m_AckEventFlag);
            }
         }
      }
   }
   RiCOSMutex_free(&me->m_SendMutex);
   /* cleanup */
   RiCSData_cleanup(m);
   return rv;
}

反馈