請教 Socket select 用法

Blue
Hi,各位先進大家好:
小弟要寫等待自網路來的UDP封包並回應,
如下,使用select來等 3秒,
在 Ubuntu 這個程式會讓CPU跑100%,
實在不解,
1.一執行,不會先印出 00000,會等 3 秒後連同 aaaaaa一併印出
2.之後不會再等3秒,直接連續印出 00000aaaaaa
請教 Select 不是應該要等待 Timeout嗎?
謝謝!

int selectReturn;
fd_set rfd;
timeval timeout= {3,0};
/*
timeout.tv_sec = 3;// 單位:秒;
timeout.tv_usec = 0;// 單位:豪秒;
*/
gethostname(name, sizeof(name));
while(true){
FD_ZERO(&rfd);
FD_SET(sockfd, &rfd);
printf("00000");
selectReturn = select(sockfd+1, &rfd, NULL, NULL, &timeout);
printf("aaaaaa");
if(selectReturn == -1){
printf("select()/n");
close(sockfd);
exit(-1);
}else{
if(FD_ISSET(sockfd, &rfd)) {
len = recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&ClientAddr,&AddrLen);
if(len>0){
buf[len]=0;
/* print received message */
printf("%s: from %s:UDP%u : %s \n", argv[0],inet_ntoa(ClientAddr.sin_addr), ntohs(ClientAddr.sin_port),buf);
strcpy(buf, "ID=");
strcat(buf, name);
len = strlen(buf);
sendto(sockfd,buf,len,0,(struct sockaddr *)&ClientAddr,AddrLen);
}else{
break;
}
}
}
}
close(sockfd);
return 0;




Blue
已解,
原因是 selectReturn = select(sockfd+1, &rfd, NULL, NULL, &timeout);
會改變 timeout 的值,
謝謝!
回到頂部