socket中select函数返回值总是-1。该如何处理

socket中select函数返回值总是-1。。。
FD_ZERO(&fds);
FD_SET(sockfd0,&fds);
while(1)
{
  i=select(sockfd0+1,&fds,NULL,NULL,&timeout);
  switch(i) 
  { 
case -1: {
printf("select error\n");
break;
}//select错误,退出程序 

case 0:break; //再次轮询 

default: 
if(FD_ISSET(sockfd0,&fds)) //测试sock是否可读,即是否网络上有数据 
{
printf("有数据来到\n");
break;
}
}
}
超时时间设置为20毫秒,第一次执行,select函数返回0,之后就每次都返回-1,这是为什么,求高手指教啊

------解决方案--------------------
FD_ZERO(&fds);
FD_SET(sockfd0,&fds);
把这两句放到while循环里,select前面

每次select前,都需要对fds重新设置的