none
インターネット接続されているのに、InternetGetConnectedStateがFALSEとなる。 RRS feed

  • 質問

  • Visual Studio 2005で開発したMFCアプリケーションにて、標記の問題が発生し、要因が分からないため質問させてください。

    本アプリでは、サーバーと通信を行う前に、InternetGetConnectedStateをコールして、
    戻り値がTRUEの場合に、インターネットに接続されていると判断して、通信を行う様な設計としています。

    ただ、インターネット接続されている状態(IEでgoogle等のHPが見れる状態)でも、
    InternetGetConnectedStateの戻り値がFALSEになってしまう場合があります。
    その際のlpdwFlagsの値は0x51ですので、以下のフラグが立っています。
    ・INTERNET_CONNECTION_CONFIGURED
    ・INTERNET_CONNECTION_MODEM
    ・INTERNET_RAS_INSTALLED

    確認環境は、Windows 7 SP1で、光回線から無線LANルータを経由して、ワイヤレス接続をしています。

    色々調べてみると、下記の記事が見つかりましたが、
    http://support.microsoft.com/kb/315035
    ・デフォルトゲートウェイは設定されている。(ipconfigにてデフォルトゲートウェイが空欄でない事を確認)
    ・インターネットオプションの[接続]タブの[ダイヤルしない]が有効になっていない
    事から、本件には該当しないと考えております。

    他に何か考えられる要因はありませんでしょうか?ご教示ください。

    2013年7月8日 9:49

回答

  • インターネット接続されている状態(IEでgoogle等のHPが見れる状態)

    InternetGetConnectedStateの戻り値がFALSEになってしまう

    の両者は、ある程度長い時間並行して発生するのでしょうか?

    (InternetGetConnectedState() を実行した瞬間にはまだワイヤレス接続が確立していない(あるいはたまたま瞬断している)ということはないのでしょうか?)

    • 回答としてマーク 星 睦美 2013年7月18日 7:56
    2013年7月8日 15:57
  • InternetGetConnectedState()は

     1.利用可能なインターネット接続が存在するか、つまり
      接続する「準備」ができているかどうか。

    を戻すのであって、

     2.実際繋がっていることを保障するものではありません。

    なぜなら、本質的には

     3.通信は有効なデータが戻ってくるまで繋がっているかどうかの判定は不可能。

    だからです。このあたりは大丈夫ですね。

    また、InternetGetConnectedState()は、接続キャッシュの影響が
    否定できません(マニュアルには書いてありませんが)。
    あたりまえですが、ブラウザはWebページのキャッシュを表示する場合もあります。
    ちなみに、この関数のマニュアルによると、FALSEを戻したときは、
    GetLastError()を呼んでエラーコードを参照できるとありますが、
    やってみたでしょうか。

    最後に、InternetCheckConnection(「実存するURL」)
    は実際に接続しているようです。

    2013年7月9日 4:33

すべての返信

  • インターネット接続されている状態(IEでgoogle等のHPが見れる状態)

    InternetGetConnectedStateの戻り値がFALSEになってしまう

    の両者は、ある程度長い時間並行して発生するのでしょうか?

    (InternetGetConnectedState() を実行した瞬間にはまだワイヤレス接続が確立していない(あるいはたまたま瞬断している)ということはないのでしょうか?)

    • 回答としてマーク 星 睦美 2013年7月18日 7:56
    2013年7月8日 15:57
  • InternetGetConnectedState()は

     1.利用可能なインターネット接続が存在するか、つまり
      接続する「準備」ができているかどうか。

    を戻すのであって、

     2.実際繋がっていることを保障するものではありません。

    なぜなら、本質的には

     3.通信は有効なデータが戻ってくるまで繋がっているかどうかの判定は不可能。

    だからです。このあたりは大丈夫ですね。

    また、InternetGetConnectedState()は、接続キャッシュの影響が
    否定できません(マニュアルには書いてありませんが)。
    あたりまえですが、ブラウザはWebページのキャッシュを表示する場合もあります。
    ちなみに、この関数のマニュアルによると、FALSEを戻したときは、
    GetLastError()を呼んでエラーコードを参照できるとありますが、
    やってみたでしょうか。

    最後に、InternetCheckConnection(「実存するURL」)
    は実際に接続しているようです。

    2013年7月9日 4:33
  • Y_RS2011 さん、こんにちは

    フォーラム オペレーターの星 睦美です。

    コミュニティの回答者からの返信が、質問の事象を解決するヒントとして役立ったのではないかと思います。

    今回は私のほうで[回答としてマーク] させていただきましたが、引き続き回答の内容に質問があれば遠慮なく返信できます。

    それでは、今後ともMSDN フォーラムをよろしくお願いします。


    日本マイクロソフト株式会社 フォーラム オペレーター 星 睦美

    2013年7月18日 8:00