hi,
I have tried to use the Timeout handling for the function
recvfrom_rt(...) in my code.
But, when I start the program the function is always blocked, and my
program doesn't stop. I'm working in user space.

my code is the next:

[...
// set  time_out
 TimeOut=500000000;             //500ms
 ioctl_rt(udpSocket,RTNET_RTIOC_TIMEOUT,&TimeOut);

 // inizializzo il task real-time, tutti i metodi usati devono essere RT
 task_rt = rt_task_init(4907,1,0,0);            //Id_Task, priorità, ...
 if (task_rt==NULL)  // controllo che il task sia stato creato
 {
        close_rt(udpSocket);    //chiudo il socket
        printf("task non creato\n");
        exit(1);
 }

 i=0;                   //i conta i segmenti
 t_sum=0;
 while (i<Npkt)  //aspetto l'invio di 10 segmenti 1200000
 {      
   *((long*)(&(Buffer[1])))=i;
   rt_make_hard_real_time();
   t_start=rt_get_time();
   a=sendto_rt(udpSocket, Buffer, BufferLen,flags,
(sockaddr*)&slaveAdrs,(socklen_t) sizeof(sockaddr));
   // ricevo il segmento e lo reinvio al mittente
   for (i_slave=0; i_slave<SLAVE;)      // I have 2 Slave
   {
        BufferLenRx=recvfrom_rt(udpSocket, BufferRx, sizeof(BufferRx),flags,
(sockaddr*)&slaveRx,&lenRx );
        if (BufferLenRx==ETIMEDOUT)
        {//Time Out
                rt_make_soft_real_time();
                rt_task_delete(task_rt);
                close_rt(udpSocket);            
                printf("TimeOut %d\n",BufferLenRx);
                exit(1);
        }
        //il confronto è tra due unsigned long
        for(j_slave=0; j_slave<SLAVE; j_slave++)
        {// controllo chi mi ha risposto
                if (slaveRx.sin_addr.s_addr==slaveIP[j_slave])
                {
                        if (i==(*((long*)(&(BufferRx[1])))))
                        {
                                i_slave++;
                                continue;
                        }
                        else
                        {
                                //errore uscita
                                rt_make_soft_real_time();
                                rt_task_delete(task_rt);
                                close_rt(udpSocket);                            
                                printf("dati errati\n");
                                exit(1);
                        }
                }
        }       
   }
   t_stop=rt_get_time();
   rt_make_soft_real_time();
   t_sum+=((long)count2nano(t_stop-t_start)/1000);
   i++;
 }

...]

do you have any idea?


-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc.  Get Certified Today
Register for a JBoss Training Course.  Free Certification Exam
for All Training Attendees Through End of 2005. For more info visit:
http://ads.osdn.com/?ad_idv28&alloc_id845&op=click
_______________________________________________
RTnet-users mailing list
RTnet-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rtnet-users

Reply via email to