プラットフォーム: WPF (.NET 4.5)。
できるだけ早くインターネット接続を確認するために、次の関数を使用します。
[DllImport("wininet.dll")]
public extern static bool InternetCheckConnection(string lpszUrl, int dwFlags, int dwReserved);
問題は、インターネットに接続していてプログラムが実行されている場合、 (予想どおり) trueInternetCheckConnection
が返されることですが、プログラムをしばらくスリープさせ、この瞬間にコンピューターをインターネットから切断し、その後、もう一度接続を確認してください。まだtrueが返されています。
どうして?!
問題を示すコードを用意しました。
using System;
using System.Runtime.InteropServices;
using System.Threading;
namespace InternetCheckConnectionTest
{
class Program
{
[DllImport("wininet.dll")]
public extern static bool InternetCheckConnection(string lpszUrl, int dwFlags, int dwReserved);
static void Main(string[] args)
{
string www = "http://www.google.com/";
Console.WriteLine("Checking connection...");
bool connected = InternetCheckConnection(www, 1, 0);
Console.WriteLine("Connection check returned " + connected.ToString());
TimeSpan ts = new TimeSpan(0, 0, 20);
Console.WriteLine("\nYou have " + ts.TotalSeconds.ToString() + " seconds to (dis)connect from/to the Internet.\n");
Thread.Sleep(ts);
Console.WriteLine("Checking connection once again...");
connected = InternetCheckConnection(www, 1, 0);
Console.WriteLine("Connection (2nd) check returned " + connected.ToString());
}
}
}
このプログラムを開始する前に、インターネットに接続していることを確認してください。
このメッセージの後:
インターネットとの接続 (切断) には 20 秒かかります。
インターネットから切断します。インターネットから切断されていてもTrueInternetCheckConnection(www, 1, 0)
を返すことがわかります。問題はなぜですか?