私はselect()APIのタイムアウトパラメータとして最大20秒しか設定できませんでした。どのような私は20の上方与えた値が、(選択)が私を助けてくださいので、私はこのタイムアウトのためのselect()の使用
int timeoutcount = 0;
do
{
FD_ZERO(&fd);
FD_SET(sock,&fd);
timeout.tv_sec = 20;
timeout.tv_usec = 0;
rc = select (sock+1,&fd,null,null,&timeout);
if(rc ==0)
timeoutcount += 20;
}
while(rc ==0 && timeoutcount <60)
のような1分間のタイムアウトのループを記述しようとしていた ... 20秒そのもの後に戻っています...私は正しい方法で行っていますか? もしそうなら、最初timeout..help後の選択に戻り1は私があまりにも 注これを理解:私は客観Cで
「靴下」にはタイムアウトしていません。 – nos
@nos私が初めて試していたとき、タイムアウトを60秒に設定しました。自分のネットワークケーブルが抜かれていても、20秒後にイベントを「靴下」に持ってきました。その後、タイムアウトを20秒にしたとき、正しく動作していました。 – Kesav
まあ、ソケットイベントを処理する必要があります。ケーブルが抜かれているかどうかは関係ありません。あなたが何をしているのかによって、プラグが抜かれているか、ソケットレベルで何かがタイムアウトしているという事実があるため、イベントが発生するかもしれません。 selectは、ソケットにイベントがあるか、タイムアウトが発生したかを返します。 select()は宣言されたとおりに動作します。ソケットイベントを処理しない場合、次にそのソケットでselectを呼び出すと同じイベントが発生します。 – nos