Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выбор интерфейса для исходящего соединения. 
:(
    Опции темы
F22
Дата 2.2.2010, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.2.2010

Репутация: нет
Всего: нет



Исходные данные:
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. Наверно какие-то проблемы бинда с натом, а 

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

PM MAIL   Вверх
InvalidProperty
Дата 2.2.2010, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

Репутация: нет
Всего: 9



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


--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
F22
Дата 2.2.2010, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.2.2010

Репутация: нет
Всего: нет



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

Ну это не интересно:
1. рухнуть может только инет, а локалка работать и для того чтобы программа это поняла надо набрать некоторую статистику, а это время.
2. не работать может только один сервер по причине нарушения маршрута или забанен айпи и и переключать маршрутами ВЕСЬ трафик на второй интерфейс не целесообразно, а переключать только данный сервер - так таблица маршрутизации будет похожа бог знает на что.
3. После переключения на второй интерфейс надо периодически переключаться на первый для проверки, а это пропадание связи.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0378 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.