まず第一に、私は C の初心者です。いくつかのレガシー C コードを継承しています。このアプリケーションでは、タイムアウトが正しく機能していません。シグナルとアラームを使用してタイムアウトを作成します。私は両方を読みましたが、まだ問題があります。
signal(SIGALRM, timeouthandler);
alarm(3);
...(connection to a server that may hang)...
alarm(0);
timeouthandler(){
...(connection to a server that may hang)...
}
コードの別のセクションにタイムアウトを追加する必要があるまで、これは正常に機能します。
signal(SIGALRM, timeouthandler2);
alarm(3);
...(log the time out)...
alarm(0);
timeouthandler2(){
...(log the time out)...
}
2 回目のタイムアウトが機能しないのはなぜですか? 信号とアラームの間の接続は何ですか? これを行うためのよりクリーンな(複雑ではない)方法はありますか。また、これらの両方のタイムアウトを含む別のタイムアウト ハンドラが必要になります。ありがとう!!
編集:わかりました。一度に2つのタイムアウトを設定することはできないようです。私がやろうとしていることを説明しましょう。接続したいサーバーのリストがあります。接続ごとに接続するのに3秒かかり、そうでない場合はタイムアウトする必要があります。次にglobal
、サーバーのリストのタイムアウトも必要です。これにより、すべての接続時間の合計時間が 12 秒を超えた場合にタイムアウトになり、次に進みます。これを行う別の方法はありますか?