select()の NFDS は、関数が READFDS およびその他の s でチェックするソケットの数を決定すると思いますfd_set
。したがって、 に 3 つのソケットを設定しfd_set
、最初の 1 つだけをチェックしたい場合は、select(1 + 1,...) を呼び出す必要があります。これは正しいですか?
または、「nfds は3つのセットのいずれかで最大のファイル記述子であり、それに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);
...