Как получить ip multicast, используя только один NIC - PullRequest
1 голос
/ 07 апреля 2009

У меня есть сервер с несколькими сетевыми картами, работающий под управлением Windows Server 2003. Мое приложение получает многоадресные пакеты, но теперь мне нужно получать многоадресные пакеты только от одного сетевого интерфейса. Я думаю, что это может помочь, но у меня есть несколько вопросов.

ip_mreq   mreq;

mreq.imr_multiaddr.s_addr = multicast group address
mreq.imr_interface.s_addr=  network interface address
if (setsockopt( socet
              , IPPROTO_IP
              , IP_ADD_MEMBERSHIP
              , (const void *)&mreq
              , sizeof(mreq)) < 0)
{
   std::cerr << "setsockopt error" << std::endl;
}

Прежде всего, что мне нужно использовать в качестве адреса сетевого интерфейса? Локальный адрес сетевого интерфейса (тот же, что возвращает ipconfig) или индекс сетевого интерфейса, который я могу получить с помощью функции API GetAdaptersAddresses?

Во-вторых, возможно ли это с окнами, или я просто провожу время?

Обновление Я только что прочитал о функции WSAJoinLeaf, и мне интересно, что невозможно использовать только один NIC для многоадресных рассылок.

Ответы [ 2 ]

1 голос
/ 09 апреля 2009

Первый: ваш выбор. Смотри http://msdn.microsoft.com/en-us/library/ms738695(VS.85).aspx

Второе: да, это определенно должно быть возможно. :)

0 голосов
/ 06 февраля 2010

Да, это работает, вы можете использовать GetAdaptersInfo только для интерфейсов IPv4 или GetAdaptersAddresses для обоих семейств.

Обратите внимание, что mreq указывает интерфейс только по адресу, а не по индексу, версии ip6_mreq и GROUP_REQ (семейство) предпочитают индекс, поскольку IPv6 позволяет иметь несколько совпадающих локальных адресов, но подключаться к разным сетей.

...