关于Select()操作的问题

我的想法是
在使用Select()时,使第二个参数fd_set * readfds,和第一个参数int width动态变化,因为我有一个Listen()线程,随时在监听和接收新的连接,这样,我就希望我的接收线程根据我的Select()函数中的readfds和width来实现对新的连接接收数据;并且在这个过程之中,已有的连接可能被关闭。
我自认为我的想法是对的,但是,我试验时发现,一旦我的已有的连接关闭后,(Select() 返回-1),Select就会一直返回-1;不管我的另一个线程是否已经获得了新的连接。
这样,我就猜测,是否Select返回-1之后,它就把readfds全部清调还是作了别的操作,我看了看帮助,也没有找到答案。
请问这是为什么呢?
有没有别的好的办法来实现我的这种想法。?


谢谢!谢谢

http://www.qnx.com/developers/docs/momentics621_docs/neutrino/lib_ref/s/select.html

这里是select的说明。在Errors里说明有:

Errors:
EBADF
One of the descriptor sets specified an invalid descriptor.

也就是说,你把一个fd关掉以后,fdset的相应位也要置0,否则select认为那个fd是无效的。总的来说,每次进select()之前,你都要FD_ZERO(&readfds),然后重新FD_SET()你需要的fd.

谢谢Xtang!
我知道了原因所在,是当一个Fd无效时,我没有用FD_CLR清楚。