调用select时,为什么套接字文件描述符参数加1?

时间:2017-07-12 07:13:47

标签: c sockets

每当我在C中看到select来电时,我都会将其视为:

select(sock_fd + 1, &fdset, NULL, NULL, &tv)

或类似的东西。递增文件描述符的意义是什么?

1 个答案:

答案 0 :(得分:4)

来自POSIX specification of select

  

nfds参数指定要测试的描述符范围。应在每组中检查第一个nfds描述符;也就是说,应该检查描述符集中从零到nfds-1的描述符。

也就是说,你给出了集合的 size ,其中每个描述符都是索引

描述符集基本上实现为数组,sock_fd(在您的情况下)是索引到该数组中,而sock_fd + 1 size