select() の実験中に奇妙な結果が得られました。
fd_set tempset,set; //set of descriptors
FD_ZERO(&set); //initialize descriptor set to NULL
FD_SET(serversock,&set); //add server's socket to descriptor set 'set'
timeout.tv_sec=2;
timeout.tv_usec=0;
while(1){
tempset=set;
timeout.tv_sec=2;
timeout.tv_usec=0;
printf("%s","Waiting on select\n");
int ret=select(FD_SETSIZE,&tempset,NULL,NULL,&timeout);
if(ret==0) printf("timeout ");
else if(ret==-1){
printf("Error occured\n");
exit(0);
}
else if(ret>0){ //socket ready for reading
for(i=0;i<FD_SETSIZE;i++){
if(FD_ISSET(i,&tempset)){ //check if it's serversock
if(i==serversock){
//accept connection and read/write
printf("Client connected\n");
}//i==serversock close
}
}//for ends
}
行を削除すると printf("%s","Waiting on select\n"); select は無期限に待機し続けます。ただし、行を再挿入すると、すべてが期待どおりに機能します (クライアント接続でテストされています)。
何か不足していますか?
前もって感謝します!