私の質問は:(select()を使用して)新しいクライアントがサーバーに接続しているかどうかをどのように知ることができますか?accept()がブロックしているため、単にacceptを使用することはできません...
例:fd user1(fd = 4)とuser2(fd = 5)に2つのクライアントを設定しています。だから、私はselectを使って誰がソケットに書いているのかを知る:
FD_ZERO(read_fds);
FD_SET(user1, read_fds);
FD_SET(user2, read_fds);
error = select(user2 + 1, read_fds, NULL, NULL, NULL);
if (FD_ISSET(user1, read_fds) == 1)
printf("user1 talks.\n");
...
しかし、新しいユーザーがサーバーに接続しているかどうかを知りたいのですが、どうすればよいですか?私は試しました:
FD_ZERO(read_fds);
FD_SET(user1, read_fds);
FD_SET(user2, read_fds);
FD_SET((user2 + 1), read_fds);
error = select(user2 + 2, read_fds, NULL, NULL, NULL);
if (FD_ISSET(users2 + 1) == 1)
{
printf("New user.\n");
accept(..., ...);
}
...
しかし、このコードでは、毎回return-1を選択します...
解決策 ?^^