Linuxでは、プログラムが後で特別なことが起こっていることを認識せずに、プログラムがネットワーク操作(ネットワーク接続が無効になっていると失敗する)を実行しようとするとすぐにネットワーク接続を有効にする方法を探しています。
より一般的には、オペレーティングシステムがネットワーク操作が何らかの理由で失敗することを認識すると、プログラムイメージをexec()してからプログラムが完了するのを待ち、結果がEXIT_SUCCESSの場合はネットワークを再試行する方法はありますか?働く?
答え1
オペレーティングシステムが特定のネットワーク操作が何らかの理由で失敗することを認識し、そのプログラムが完了するのを待ってから結果がEXIT_SUCCESSの場合、ネットワーク操作を再試行するときにプログラムイメージをexec()する方法はありますか?
いいえ。
要求に応じてダイヤルアップを使用する場合は、接続が成功したためにトリガーされない再試行に依存します。Network unreachable
TCP接続試行など、すぐに終了するエラーを回避するには、接続を確立する前にパケットを破棄するデフォルトのパスを維持します。
私の考えでは、古いスタイルのオンデマンドダイヤルも、現在使用されているよりも長いDNSタイムアウト/再試行回数に依存しているようです。最新システムでは、15秒後に放棄します。これは十分に長くないと思います。。
オンデマンドダイヤルはまったく異なるものです。ほとんどの場合、これはうまくいくと思います。
プログラムは後ろから何か特別なことが起こっているという事実さえ気付かない。
それでは、どうすればいいですか?
前のコードを詳しく見てみると、それがPPP用であることが確実にわかります。これは、一部の最新のモバイルデータ接続では有用である場合とそうでない場合があります。ただし、PPPを使用しないと、古いコードは使用できません。たとえば、ネットワークインターフェイスにはデフォルトパスが割り当てられますが、対応するppp0
PPPデーモンはondemand
このオプションを使用して実行されるため、必要になるまで実際に接続は確立されません。