0

私はこのようなことをしています

val = select(max_fd+1,&readfd,0,0,0);
if(val >=1){
    printf("I have got some value");
}

私のコードは、理由もなく選択から抜け出します。パケットを受信しません。10回の実行で、選択を待機する場所で1回実行されます。休むだけで終了します。

ソケットは ICMP パケットを受信するように設定されています。その1回の実行で、完全に機能します。なぜこれが9回失敗するのですか?

4

2 に答える 2

0

私の推測では、プロセス中にファイル記述子が閉じられていると思います。この場合valは -1 になり、errnoに設定されEBADFます。

于 2014-04-01T08:18:25.637 に答える
0

select()エラーが発生した場合は -1 を返します。の戻り値をselect()確認errnoし、戻り値が -1 かどうかを確認してください。

于 2014-04-01T08:24:40.420 に答える