是否有必要在select系统调用之间重置fd_set?

san*_*eep 8 c unix

我在Unix中使用select函数时遇到问题.

我有一台等待连接的服务器.首先,我将侦听套接字文件描述符添加listener到fd_set readfds使用FD_SET(listener, readfds),然后我使用它select().

当我得到一个连接时,我调用accept()readfds使用接受的文件描述符设置in,并开始从连接接收数据.但是,当我检查strace中的代码时,select没有显示readfdswhile中的监听器select()正在执行第二次.

在再次FD_SET(listener, readfds)调用之前,是否需要再次使用侦听器文件描述符select()

谢谢.

Jon*_*ler 12

是(必须重置系统调用fd_set之间select()).

这是令人讨厌的,但它们充当输入/输出参数; 它们由系统调用读取并修改.当select()返回时,值都被修改,以反映该组准备的文件描述符.因此,每次调用之前select(),都必须(重新)初始化fd_set值.