2013-09-20 4 views
0

Мне было любопытно, какие параметры могут быть для получения информации о физическом порте от сетевой платы, которую я затем могу использовать в качестве отказа при сбое, если связь будет потеряна. И.Е. провод по порту0 вытягивается, моя программа распознает это и не удается выполнить порт1 для поддержания соединения.Программно получить порт # из моей сетевой карты с помощью C++

ответ

2

Я думаю, что вы путаете несколько понятий здесь:

  • Прежде всего, это зависит от того, как сети на вашей машине установлен. У вас несколько сетевых адаптеров, подключенных к одной и той же сети? Рассматриваются ли они как один логический адаптер?

  • Во-вторых, предполагается, что ваш OS уровне сети использует только каждый сетевой адаптер для отдельной записи маршрута, если потянуть за кабель, ваша программа будет увидеть EOF на следующей read() (или сигнал на следующий write()). В этом случае вы можете восстановить свое соединение (без каких-либо оснований сетевого адаптера).

  • В общем, вы не можете притворяться, что соединение не было завершено на уровне библиотеки. OS может предоставить некоторую магию низкого уровня, чтобы сделать что-то подобное, но на уровне сокетов вам нужно будет восстановить соединение (т. Е. Обе конечные точки будут ощущать завершение соединения).

+0

Будет видеть EOF. В основном то, чего он хочет достичь, должно быть частично достигнуто на более низком уровне протокола, чем там, где он хочет его решить. Если сетевые адаптеры указывают на разные маршруты, протоколы маршрутизатора должны обрабатывать переход на другой ресурс (учитывая, что цель доступна для обоих сетевых адаптеров), однако это не будет прозрачным, необходимо восстановить соединение на уровне приложения. Если сетевые адаптеры подключены к одной и той же сети, то речь идет о транкинге, что является особой вещью, для чего требуется взаимодействие с драйверами и ОС. Это может также не обеспечить автоматический переход на другой ресурс. –

-1

Я согласен с Александром.

Однако, если вы используете версию Linux и хотите знать обо всем, что связано с сетью, посмотрите /proc/net, в частности файлы dev и tcp.

Вот хорошая отправная точка: http://www.onlamp.com/pub/a/linux/2000/11/16/LinuxAdmin.html

-1

Я не думаю, что вы можете, как другие заявили.

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

Смежные вопросы