I set a timeout for recvfrom() by calling select() on a UDP socket: socket()=>sendto()=>select()=>recvfrom(). It seems that it need not call bind() or connect() for UDP socket here. This method is recommended by "UNIX Network Programming Volum1 Networking APIs: Sockets and XTI(Second Edition)", W.Richard Stevens Chapter 13 section 2. source code: http://www.cs.odu.edu/~cs779/stevens2nd/lib/readable_timeo.c http://www.cs.odu.edu/~cs779/stevens2nd/advio/dgclitimeo.c
>> if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0){ >> fprintf(stderr, "cannot open socket for udp packet!\n"); >> exit(1); >> } >> >> while(1){ >> struct timeval tv; >> fd_set fds; >> radius_send(sockfd, NULL, secret); >> FD_ZERO(&fds); >> FD_SET(sockfd, &fds); >> >> tv.tv_sec = timeout; >> tv.tv_usec = 0; >> printf("select the socket_fd : d, thread_id is : d\n", >> sockfd, tid); >> if((ret=select(sockfd + 1, &fds, NULL, NULL, &tv))==1) >> *rep = radius_recv(sockfd); >> ... This test code is cut from a multi-thread radius(Authentication,Accounting protocol,UDP) client. if radius thread count > 18,some thread's select() will take 100% CPU in cygwin envirionment, but the same code work ok in solaris and linux envirionment. >On Fri, Oct 31, 2003 at 01:14:17PM +0800, zhouxin wrote: >> Cygwin implementation of select() take 100 CPU under multi-thread environment >> sometimes. >> [...] >> if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0){ >> fprintf(stderr, "cannot open socket for udp packet!\n"); >> exit(1); >> } >> >> while(1){ >> struct timeval tv; >> fd_set fds; >> >> FD_ZERO(&fds); >> FD_SET(sockfd, &fds); >> >> tv.tv_sec = timeout; >> tv.tv_usec = 0; >> printf("select the socket_fd : d, thread_id is : d\n", >> sockfd, tid); >> select(sockfd + 1, &fds, NULL, NULL, &tv); >> } > >That's not allowed. What is the select call waiting for? You >didn't bind or connect it. > >Corinna > >-- >Corinna Vinschen Please, send mails regarding Cygwin to >Cygwin Developer mailto:[EMAIL PROTECTED] >Red Hat, Inc. > >-- >Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple >Problem reports: http://cygwin.com/problems.html >Documentation: http://cygwin.com/docs.html >FAQ: http://cygwin.com/faq/ > > >. = = = = = = = = = = = = = = = = = = = = 致 礼! zhouxin [EMAIL PROTECTED] 2003-11-03 -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/