Добро пожаловать, Гость. Пожалуйста авторизуйтесь здесь.
FGHIGate на GaNJa NeTWoRK ST@Ti0N - Просмотр сообщения в эхоконференции RU.BINKD
Введите FGHI ссылку:


Присутствуют сообщения из эхоконференции RU.BINKD с датами от 14 Jul 13 17:53:22 до 24 Apr 24 18:49:04, всего сообщений: 1924
Ответить на сообщение К списку сообщений Предыдущее сообщение Следующее сообщение
= Сообщение: 1155 из 1924 ========================================= RU.BINKD =
От   : Andrei Dzedolik                  2:463/1331         29 Jun 18 10:48:40
Кому : Stas Mishchenkov                                    29 Jun 18 10:48:40
Тема : IPv6 & IPv4
FGHI : area://RU.BINKD?msgid=2:463/1331+5b360e89
На   : area://RU.BINKD?msgid=2:460/58+5b35c04f
= Кодировка сообщения определена как: CP866 ==================================
==============================================================================
Greetings, traveler ...

29 Jun 18 08:09, you wrote to Alexandr Kruglikov:


SM>>>    Как тогда мне правильно сделать, что бы он делал исходящие
SM>>> сесси только с этого IPv6 адреса и с любого из двух IPv4?

AK>> А три раза bindaddr нельзя?
AK>> Мне просто попробовать не на чем, у меня один такой и один такой
AK>> =(

SM> Даже два раза нельзя. Вернее можно, но дамп конфига показывает, что
SM> работает только последнее вхождение bindaddr, а на первое начинает
SM> ругаться в лог теми же словами.

Посмотрел в код клиента (client.c), ты выпадаешь тут:

      if (config->bindaddr[0])
      {
        struct addrinfo *src_ai, src_hints;

        memset((void *)&src_hints, 0, sizeof(src_hints));
        src_hints.ai_socktype = SOCK_STREAM;
        src_hints.ai_family = ai->ai_family;
        src_hints.ai_protocol = IPPROTO_TCP;
        if ((aiErr = getaddrinfo(config->bindaddr, NULL, &src_hints, &src_ai)) == 0)
        {
          if (bind(sockfd, src_ai->ai_addr, src_ai->ai_addrlen))
            Log(4, "bind: %s", TCPERR());
          freeaddrinfo(src_ai);
        }
        else
          if (aiErr == EAI_FAMILY)
            /* address family of target and bind address don't match */
            continue;
          else
            /* otherwise just warn and don't bind() */
            Log(2, "bind -- getaddrinfo: %s (%d)", gai_strerror(aiErr), aiErr);
      }

config->bindaddr может быть один и только один. По идее при несовпадении AF нашего bindaddr и адреса ноды, ты должен попасть в 'continue;' и клеинт долен попроболвать другой адрес ноды, но ты попадаешь Log(...) и что происхожит дальшье из твоего лога не понятно :) Сессия-то проходит дальше или нет?

Я думаю, нкжно поменять readcfg и читать все указанные bindaddr из конфига + перебирать их в этом куске клента по очереди. Будет время - перепишу, предложу патч.

\aID


--- GoldED+/BSD 1.1.5-b20170303
* Origin: Hugayda Station (2:463/1331)

К главной странице гейта
Powered by NoSFeRaTU`s FGHIGate
Открытие страницы: 0.080800 секунды