Работает ли сеть? С++ Федора/Юникс

Есть ли у кого-нибудь фрагмент кода, который проверяет, включена ли сеть на машине и имеет ли активный IP-адрес.

У меня есть сетевое программное обеспечение, которое подключается к другим клиентским машинам. Хотя оно работает, когда машина подключена, но если я отсоединяю кабель или отключаю сеть, оно выдает целый ряд исключений.

Было бы неплохо просто поставить галочку сверху :D

Заранее спасибо


person Angel.King.47    schedule 02.12.2009    source источник


Ответы (3)


Сеть всегда находится в динамическом состоянии, простой проверки в начале прогона недостаточно для корректной работы. Поэтому, к сожалению, вам нужно проверить состояние успешного выполнения сетевых операций.

Что касается даже запуска программы с отключенным от сети состоянием... Подумайте, запускается ли ваша программа автоматически после сбоя компьютера или сбоя питания. Или если какой-либо другой компонент пострадал от чего-то подобного или глюка. Такое случается на удивление часто, и перезапуск программы на n+1 компьютерах только потому, что какой-то придурок наткнулся на сетевой кабель, довольно раздражает.

Для проверки общей доступности сети вы всегда можете «ping -q -c 1 127.0.0.1» вернуть значение 1, если localhost не отвечает. Это должно быть в сценарии запуска, совершенно необязательно кодировать его в приложении.

person Pasi Savolainen    schedule 02.12.2009
comment
У меня есть функция ping: я мог бы использовать это, спасибо - person Angel.King.47; 02.12.2009

Вероятно, вам следует просто ловить исключения: иначе у вас будут проблемы, если машина подключена к сети, но не к той, в которой есть соответствующие другие машины.

person Douglas Leeder    schedule 02.12.2009
comment
Я уже ловлю исключения, и я ловлю их целую кучу, но есть много предварительных действий, прежде чем я запущу сеть. И вся предобработка бесполезна, если нет сети. Было бы полезно проверить, работает ли сеть. - person Angel.King.47; 02.12.2009
comment
Поэтому переупорядочите свой код - проверьте, можете ли вы подключиться к (хотя бы одному) соответствующему клиенту, затем выполните свои расчеты, прежде чем общаться с подключенными клиентами. - person Douglas Leeder; 02.12.2009

Я думаю, вы можете получить то, что хотите, с помощью команды «ifconfig» в терминале.

person Aditya R    schedule 02.12.2009
comment
я думаю это должен быть ipconfig - person Ashish; 02.12.2009
comment
Не в Linux/Unix. Только Windows решила изменить название команды. - person Douglas Leeder; 02.12.2009
comment
и ping также необходим, чтобы проверить, доступна ли машина или нет. - person Ashish; 02.12.2009
comment
Мне нужно сделать это на С++ и определить, установлено ли соединение или нет из-за демона. - person Angel.King.47; 02.12.2009
comment
Я не уверен, но вы можете написать скрипт, чтобы проверить, работает ли сеть, и вызвать это из своего кода. - person Aditya R; 02.12.2009