I have seen many different ways to check if the computer has an active internet connection. The best one, IMO, is to check for the presence of the default route in the IP forwarding table that is maintained by windows. This can be checked by using
GetIPForwardTable
function found in the
iphlpapi.dll
library. The default route is present if one of the entries in the table has a forwarding destination of
0.0.0.0
.
Here is some C code that uses this:
#include <iphlpapi.h>
#pragma comment(lib, "iphlpapi")
bool IsInternetAvailable()
{
bool bIsInternetAvailable = false;
DWORD dwBufferSize = 0;
if (ERROR_INSUFFICIENT_BUFFER == GetIpForwardTable(NULL, &dwBufferSize, false))
{
BYTE *pByte = new BYTE[dwBufferSize];
if (pByte)
{
PMIB_IPFORWARDTABLE pRoutingTable = reinterpret_cast<PMIB_IPFORWARDTABLE>(pByte);
if (NO_ERROR == GetIpForwardTable(pRoutingTable, &dwBufferSize, false))
{
DWORD dwRowCount = pRoutingTable->dwNumEntries; for (DWORD dwIndex = 0; dwIndex < dwRowCount; ++dwIndex)
{
if (pRoutingTable->table[dwIndex].dwForwardDest == 0)
{ bIsInternetAvailable = true; break; }
}
}
delete[] pByte; }
}
return bIsInternetAvailable;
}
I originally got this code from the CP forums, but I have not been able to get back to the original post:
http://www.codeproject.com/script/comments/forums.asp?msg=1367563&forumid=1647#xx1367563xx[
^], I keep getting a "Page not Found" error so I am posting this tip so I can refer people here.
Father of two, brother of two, child of two.
Spouse to one, uncle to many, friend to lots.
Farmer, carpenter, mechanic, electrician, but definitely not a plumber.
Likes walks with the wife, board games, card games, travel, and camping in the summer.
High school graduate, college drop-out.
Hobby programmer who knows C++ with MFC and the STL.
Has dabbled with BASIC, Pascal, Fortran, COBOL, C#, SQL, ASM, and HTML.
Realized long ago that programming is fun when there is nobody pressuring you with schedules and timelines.