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;
}

피드백