While working with large codebase for legacy applications, whenever I have seen a piece of code that checks whether an internet connection is active or not, I have mostly seen the uses of functions such as:
InternetCheckConnection(L"http://www.google.com",FLAG_ICC_FORCE_CONNECTION,0)
//or
BOOL bConnected = IsNetworkAlive(&dwSens)
//or
InternetGetConnectedState(&dwReturnedFlag, 0)
//or some other functions
but there exists a very very simple way to do this where you wouldn't need to include other header files of write code, that is:
if (system("ping www.google.com"))
My question is that what are the drawbacks, if any, to use ping
from the code when I need to see if a connection is available or not?
Assuming that ping
is not going to be disabled on the machines where my software is going to run.
According to Microsoft API document InternetCheckConnection is deprecated.
Instead of this API we can use INetworkListManager interface to check whether Internet is connected or not for windows platform.
Here below is the win32 codebase :
The drawback with
system("ping www.google.com")
is twofold:If someone replaced the system
ping
command with their own, it could give you the wrong results [and if the process callingping
is running with extra privileges, it could do something "interesting" with that privilege]. This is generic for anysystem
operation.You are starting another process, which then has to run and shut down before you get the answer [and of course do more or less the same things that
InternetCheckConnection
does - look up the name, translate it to an IP address, send packet to that address, wait for a response, interpret that response, and so on].