Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Выбор интерфейса для исходящего соединения.


Автор: F22 2.2.2010, 15:02
Исходные данные:
Win XP Sp3. Есть две сетевые карты, подключенные к локальным сетям, через которые есть выход в инет. На первой белый айпи 91.х.х.х, на второй серый 

айпи 10.х.х.х (выход в инет через NAT). Маршрут по умолчанию для инета настроен на первую.
Программа-клиент соединяется с различными серверами в инете.

Задача:
При падении инета на первой сетевой карте (ошибка соединения) необходимо повторить попытку через вторую.

Реализация:
Для повторной попытки делаю новый сокет с bind с адресом 10.х.х.х и тут получается проблема, Если сервер в первой локальной сети, то всё работает 

прекрасно, а если это инетовский сервер, то функция connect проходит нормально, а функции send и recv уже не работают, ошибка 10054 - An existing 

connection was forcibly closed by the remote host. netstat показывает для этого соединения TIME_WAIT. Наверно какие-то проблемы бинда с натом, а 

какие непонятно и как их победить?

Автор: InvalidProperty 2.2.2010, 17:37
а bind зачем? после того, как заметишь, что коннект рухнул, через некоторое время пытаешься поднять его сново обычной связкой socket / connect, и у тебя все нормально откроется. Только что проверял на своей программе.

Автор: F22 2.2.2010, 18:36
Цитата(InvalidProperty @ 2.2.2010,  17:37)
а bind зачем? после того, как заметишь, что коннект рухнул, через некоторое время пытаешься поднять его сново обычной связкой socket / connect, и у тебя все нормально откроется. Только что проверял на своей программе.

Ну это не интересно:
1. рухнуть может только инет, а локалка работать и для того чтобы программа это поняла надо набрать некоторую статистику, а это время.
2. не работать может только один сервер по причине нарушения маршрута или забанен айпи и и переключать маршрутами ВЕСЬ трафик на второй интерфейс не целесообразно, а переключать только данный сервер - так таблица маршрутизации будет похожа бог знает на что.
3. После переключения на второй интерфейс надо периодически переключаться на первый для проверки, а это пропадание связи.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)