Click here to Skip to main content
Click here to Skip to main content

Tagged as

Check for an active Internet connection

, 22 Mar 2010 CPOL
Rate this:
Please Sign up or sign in to vote.
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...
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;
    // Get the required buffer size
    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);
            // Attempt to fill buffer with routing table information
            if (NO_ERROR == GetIpForwardTable(pRoutingTable, &dwBufferSize, false))
            {
                DWORD dwRowCount = pRoutingTable->dwNumEntries; // Get row count
                // Look for default route to gateway
                for (DWORD dwIndex = 0; dwIndex < dwRowCount; ++dwIndex)
                {
                    if (pRoutingTable->table[dwIndex].dwForwardDest == 0)
                    { // Default route designated by 0.0.0.0 in table
                        bIsInternetAvailable = true; // Found it
                        break; // Short circuit loop
                    }
                }
            }
            delete[] pByte; // Clean up. Just say "No" to memory leaks
        }
    }
    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.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

PJ Arends
President
Canada Canada
No Biography provided

Comments and Discussions

 
-- There are no messages in this forum --
| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.1411022.1 | Last Updated 22 Mar 2010
Article Copyright 2010 by PJ Arends
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid