ping — проверка интернет-соединения из кода C ++

Работая с большой кодовой базой для унаследованных приложений, всякий раз, когда я видел фрагмент кода, который проверяет, активно ли интернет-соединение, я в основном видел использование таких функций, как:

InternetCheckConnection(L"http://www.google.com",FLAG_ICC_FORCE_CONNECTION,0)
//or
BOOL bConnected = IsNetworkAlive(&dwSens)
//or
InternetGetConnectedState(&dwReturnedFlag, 0)
//or some other functions

но существует очень простой способ сделать это, когда вам не нужно будет включать другие заголовочные файлы кода записи, а именно:

if (system("ping www.google.com"))

Мой вопрос заключается в том, какие недостатки, если таковые имеются, использовать ping из кода, когда мне нужно увидеть, если соединение доступно или нет?

При условии, что ping не будет отключен на машинах, где будет работать мое программное обеспечение.

1

Решение

Недостаток с system("ping www.google.com") является двойным:

  1. Если кто-то заменил систему ping команда с их собственным, это может дать вам неправильные результаты [и если процесс, вызывающий ping работает с дополнительными привилегиями, он может сделать что-то «интересное» с этой привилегией]. Это общее для любого system операция.

  2. Вы запускаете другой процесс, который затем должен запускаться и закрываться, прежде чем вы получите ответ [и, конечно, делать более или менее те же самые вещи, которые InternetCheckConnection делает — ищет имя, переводит его в IP-адрес, отправляет пакет по этому адресу, ждет ответа, интерпретирует этот ответ и т. д.].

3

Другие решения

Других решений пока нет …