FD_SET の実行中に select socket 呼び出しを呼び出す前に、記述子の値を 1024 (FD_SETSIZE) よりも大きく設定すると、何か問題がありますか? 未定義の動作を作成しますか?
1017 次
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 に答える