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