int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout);

对于第一个参数nfds,这是我从Wiki获得的信息:



我有一个简单的问题:
如果要处理多个套接字,应如何设置select的第一个参数?

我应该将其设置为最大的插槽号+ 1吗?

如果是这样,是否意味着select正在侦听小于最大套接字号+ 1的所有文件描述符?

例如,我有三个套接字:111、222和333。如果将第一个参数设置为334,是否表示我正在侦听从0到333的所有文件描述符?

最佳答案



是!



不,它仅对列出的fd_sets执行操作
readfds,writefds和exceptfds



不,您只在111、222和333上执行$ select $。

在内部sys_select设置3个位图,将这三个位集的每个位都设置为1,然后如果设置了这些位中的任何一个(相应地腐 eclipse 了文件描述符操作),则对其执行wait_key_set操作。

该接口(interface)的原因是在内核中它演变成一个非常可预测的for循环;使工作非常安全;而不是尝试在内核内部进行计算。

07-24 09:39
查看更多