![]() |
|
Модераторы: feodorv |
![]()
|
|
| F22 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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. Наверно какие-то проблемы бинда с натом, а какие непонятно и как их победить? |
|||
|
||||
| InvalidProperty |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
| F22 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 2.2.2010 Репутация: нет Всего: нет |
Ну это не интересно: 1. рухнуть может только инет, а локалка работать и для того чтобы программа это поняла надо набрать некоторую статистику, а это время. 2. не работать может только один сервер по причине нарушения маршрута или забанен айпи и и переключать маршрутами ВЕСЬ трафик на второй интерфейс не целесообразно, а переключать только данный сервер - так таблица маршрутизации будет похожа бог знает на что. 3. После переключения на второй интерфейс надо периодически переключаться на первый для проверки, а это пропадание связи. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |