进行选择调用时“socket + 1”实现了什么?Unix/C++

Luc*_*kun 1 c++ unix sockets select udp

我正在基于这个https://linux.m2osw.com/c-implementation-udp-clientserver实现一个 udp 监听服务器。我注意到在建立超时接收器时,作者在进行选择调用时包含了“f_socket+1”。我想知道这到底是在做什么?任何解释都有帮助,谢谢!

上面链接的功能摘录:

    FD_ZERO(&s);
    FD_SET(f_socket, &s);
    struct timeval timeout;
    timeout.tv_sec = max_wait_ms / 1000;
    timeout.tv_usec = (max_wait_ms % 1000) * 1000;
    int retval = select(f_socket + 1, &s, &s, &s, &timeout); 
Run Code Online (Sandbox Code Playgroud)

Bri*_*ian 5

https://pubs.opengroup.org/onlinepubs/007908799/xsh/select.html

所述NFDs的参数指定的文件描述符的范围进行测试。的选择()函数测试文件描述符在0到范围NFDs的-1。

因此,该参数应设置为比要监视的最大文件描述符大 1 的值。

  • 仅供参考,“(e)poll()”通常优于“select()”,那么您不必担心这一点,因为“(e)poll()”被赋予了一个*特定*套接字描述符的数组使用时,它不必处理描述符的*范围*。 (2认同)