Hi, I'm trying to adapt the example server to get messages on a loop, with a timeout.
I set the timeout with ioctl_rt to 500ms (0,5s), and then call rt_dev_recv from inside the loop. Unfurtunately, no matter what value i set the timeout, it always times out imeediately (half a second should be noticeable by me). If i set it to 0, it blocks OK. If i send something to it, it does get received, because i loop around the recv. But that is not the desired behaviour. Sorry if this question seems stupid, but does anyone know where the problem might be, or where i could get some information? Thanks in advance, Paulo Schreiner /* simpleserver.c * * simpleserver - a simple server for demonstration of rtnet's lxrt interface * 06/2003 by Hans-Peter Bock <[EMAIL PROTECTED]> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <sched.h> #include <netdb.h> #include <sys/types.h> #include <sys/mman.h> #include <sys/stat.h> #include <arpa/inet.h> #include <netinet/in.h> #include <signal.h> #include <rtai_lxrt.h> #include <rtnet.h> static struct sockaddr_in local_addr; volatile static int end = 0; void endme(int sig) { printf("Signal\n"); end = 1; } int main(int argc, char *argv[]) { int sockfd = 0; int ret = 0; char msg[4000]; int64_t TimeOut; RT_TASK *lxrtnettsk; /* register signals */ signal(SIGHUP, endme); signal(SIGKILL, endme); signal(SIGTERM, endme); signal(SIGALRM, endme); /* Set variables to zero. */ memset(msg, 0, sizeof(msg)); memset(&local_addr, 0, sizeof (struct sockaddr_in)); printf("RTnet, simpleserver for LXRT\n"); /* Check arguments and set addresses. */ if (argc == 2) { local_addr.sin_family = AF_INET; local_addr.sin_addr.s_addr = INADDR_ANY; local_addr.sin_port = htons(atoi(argv[1])); } else { fprintf(stderr, "Usage: " "%s <local-port>\n", argv[0]); exit(1); } /* Lock allocated memory into RAM. */ mlockall(MCL_CURRENT|MCL_FUTURE); /* Create new socket. */ sockfd = rt_dev_socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { printf("Error opening socket: %d\n", sockfd); exit(1); } /* set timeout */ TimeOut = 500000000; printf("Timeout = %i\n", TimeOut); ioctl_rt(sockfd, RTNET_RTIOC_TIMEOUT, &TimeOut); /* Initialize a real time buddy. */ lxrtnettsk = rt_task_init(4900, 1, 0, 0); if (NULL == lxrtnettsk) { rt_dev_close(sockfd); printf("CANNOT INIT MASTER TASK\n"); exit(1); } /* Switch over to hard realtime mode. */ rt_make_hard_real_time(); /* Bind socket to local address specified as parameter. */ ret = rt_dev_bind(sockfd, (struct sockaddr *) &local_addr, sizeof(struct sockaddr_in)); int i = 0; while(i++ < 10) { /* Block until packet is received. */ ret = rt_dev_recv(sockfd, msg, sizeof(msg), 0); if(ret < 0) { printf("Error %i\n", ret); //break; } //else { /* this breaks real time, but is useful for testing. Should be changed to some kind * of RTAI message (Paulo) */ printf("(%i) Received message: \"%s\"\n", i, msg); //} } /* Switch over to soft realtime mode. */ rt_make_soft_real_time(); /* Close socket. * Note: call must be in soft-mode because socket was created as non-rt! */ rt_dev_close(sockfd); /* Stop the timer. */ stop_rt_timer(); /* Delete realtime buddy. */ rt_task_delete(lxrtnettsk); //printf("Received message: \"%s\"\n", msg); printf("ended\n"); return 0; } ------------------------------------------------------- All the advantages of Linux Managed Hosting--Without the Cost and Risk! Fully trained technicians. The highest number of Red Hat certifications in the hosting industry. Fanatical Support. Click to learn more http://sel.as-us.falkag.net/sel?cmd=lnk&kid=107521&bid=248729&dat=121642 _______________________________________________ RTnet-users mailing list RTnet-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rtnet-users