我认为select()fd_set
中的 NFDS 决定了该函数将在 READFDS 和其他s中检查多少个套接字。因此,如果我们在 中设置 3 个套接字fd_set
,但我只想检查第一个,我必须调用 select(1 + 1,...)。这是正确的吗?
或者“ nfds 是三个集合中任何一个中编号最高的文件描述符,加上 1 ”在linux select man中是否意味着不同的东西?另外为什么我们需要加+1?
示例代码 - 已修复
int CLIENTS[max_clients];//Clients sockets
int to_read;
FD_ZERO(&to_read);
int i;
int max_socket_fd = 0;
for (i = 0 ; i < max_clients ; i++)
{
if(CLIENTS[i] < 0)
continue;
int client_socket = CLIENTS[i];
if(client_socket > max_socket_fd)
max_socket_fd = client_socket;
FD_SET(client_socket , &to_read);
}
struct timeval wait;
wait.tv_sec = 0;
wait.tv_usec = 1000;
int select_ret = select(max_socket_fd + 1, &read_flags, NULL, NULL, &wait);
...