これを示すサンプル コードは見つかりませんでした。以下は、一連のソケットでテストしたコードの一部です。(以下のコードではありません)、関連するすべてのソケットを監視するために、"except_set" を "read_set" と "write_set" の結合に設定したことに注意してください。
基本的に私が期待しているのは、エラーが発生したときです。エラーのあるソケットのリストを出力する必要があります。ただし、私が観察したのは、「n == -1」の場合で、1 つのエラー メッセージ (私の場合は「不正なファイル記述子」) しか表示されません。エラーが発生したソケットを出力することをお勧めします。
別の問題: 「errno」は 1 つしかないため、複数のソケットのエラーをどのように表すことができますか (1 回の select() 呼び出しで複数のソケットでエラーが発生した場合)。私は本当に混乱しています。「except_set」はソケットごとにどのようなエラーをキャプチャしますか? 正しい使い方とは?どうもありがとう。
int n = select(max_fd + 1, &(read_set), &(write_set), &(except_set), &tv);
if (n == -1)
{
perror("select()");
exit(1);
}
else if (n == 0)
{
// process time-out ...
}
else // (n > 0)
{
for (int i=0; i < max_fd; ++i)
{
if (FD_ISSET(i, &(read_set)))
{
// process read
}
if (FD_ISSET(i, &(write_set)))
{
// process write
}
if (FD_ISSET(i, &(except_set)))
{
printf("error, %s, socket= %d", strerror(errno), i);
}
}
}