1

FD_SET の実行中に select socket 呼び出しを呼び出す前に、記述子の値を 1024 (FD_SETSIZE) よりも大きく設定すると、何か問題がありますか? 未定義の動作を作成しますか?

4

2 に答える 2

1

を使用している OS のドキュメントを確認する必要がありますがselect、ほとんどの場合そうなるでしょう。Linux の man ページから:

fd_set は固定サイズのバッファーです。FD_CLR() または FD_SET() を負の値または FD_SETSIZE 以上の値の fd で実行すると、未定義の動作が発生ます。さらに、POSIX では fd が有効なファイル記述子である必要があります。

于 2012-10-10T11:56:35.097 に答える
0

はい、エラー (perror = EINVAL) が発生するか、バッファ オーバーラン (割り当てられたバッファの外側を読み取る) が発生します。

多くの実装FD_SETSIZEでは、より大きな値に再定義できます。socket.h をインクルードする前に、より大きな値に定義しておけば問題ありません。最初に C コンパイラのマニュアルを確認してください。

于 2012-10-10T11:56:14.503 に答える