如何通过Linux中的索引访问fd_set中的FD?

X S*_*ish 0 c c++ sockets linux networking

例如,我可以fd_set.fd_array[i]在Windows中访问它们..

request_list getIncomingRequests()
{
    fd_set master_set_copy = master_set;
    request_list requests;
    int socket_count = select(0, &master_set_copy, nullptr, nullptr, nullptr);
    for (int i = 0; i < socket_count; ++i)
    {
    #ifdef _WIN32
        auto req_fd = master_set_copy.fd_array[i];
    #else
        auto req_fd = master_set_copy...[i]; // ??
    #endif
        sockaddr_in req_addr;
        getsockname(req_fd, (sockaddr*)&req_addr, &addr_len);
        requests.push_back(request(req_fd, this->fd, req_addr));
    }
    return requests;
}
Run Code Online (Sandbox Code Playgroud)

但是fd_array在Linux中不存在,所以我需要一个等价物.

DYZ*_*DYZ 5

POSIX实现fd_set不要求结构具有该字段fd_array.fd_set应该是一个不透明的数据结构.

您可以通过迭代所有支持的描述符(0通过FD_SETSIZE-1)和调用来检查设置了哪些文件描述符FD_ISSET().

从手册页注意:

select()只能监控小于的文件描述符数字FD_SETSIZE; poll(2)没有这个限制.见BUGS.