Как изменить порядок сетевых интерфейсов, возвращаемых WSAIoctl, с помощью управляющего кода SIO_GET_INTERFACE_LIST

StackOverflow https://stackoverflow.com/questions/1916452

  •  20-09-2019
  •  | 
  •  

Вопрос

Есть ли способ диктовать порядок сетевых интерфейсов, возвращаемых Win32 WinSock WSAIoctl функция SIO_GET_INTERFACE_LIST функциональность?

Предыстория:

У нас есть разнородная система CORBA, в которой служба имен, выполняющая реализацию ACE / TAO CORBA в Windows, имеет зарегистрированные в ней службы на основе ACE / TAO, которые клиенты внедрили с помощью IIOP.Необходимо использовать реализацию NET CORBA.Клиенты на базе IIOP.NET находятся на отдельном компьютере с Windows.Компьютер ACE / TAO имеет несколько сетевых интерфейсов (только один из которых доступен клиентскому компьютеру) и, следовательно, несколько IP-адресов.

IIOP.СЕТЕВОЙ клиент может подключиться к службе имен и получить прокси-сервер для объекта CORBA зарегистрированного сервера, который ему необходимо использовать, но когда он пытается использовать прокси-сервер, он выдает исключения.

Основываясь на слишком большом количестве времени, потраченного на отладку, мы пришли к выводу, что проблема заключается в том, что IIOP.NET пытается подключиться только к первому IP-адресу в строке CORBA IOR, который служба имен возвращает при запросе услуги.Строка IOR - это описание объекта, включая его IP-адреса.Большинство клиентов CORBA попытаются подключиться к объекту server, используя все адреса в строке IOR, но это выглядит как IIOP.NET этого не делает.

Код ACE / TAO, который генерирует строку IOR, использует WinSock WSAIoctl команда с управляющим кодом SIO_GET_INTERFACE_LIST чтобы вернуть список сетевых интерфейсов в поле, а затем добавить их все в строку IOR.Проблема в том, что первый IP-адрес - это тот, которого нет в сети, используемой клиентом IIOP, поэтому, когда IIOP.СЕТЕВОЙ клиент пытается подключиться к объекту сервера, используя этот IP-адрес, очевидно, что он терпит неудачу и никогда не пытается использовать правильный IP-адрес.Другие клиенты CORBA, такие как ACE / TAO, пробуют все IP-адреса, и они работают в этой конфигурации.

Поскольку я не являюсь богом сетевого взаимодействия / CORBA, для меня нереально пытаться изменить ACE / TAO или IIOP.NET , и у нас есть веские причины иметь две разделенные сети в этой системе, но если первый IP-адрес по умолчанию, возвращенный WSAIOCtl если бы клиент нуждался в таком адресе, это решило бы проблему, поскольку этот IP-адрес тогда стал бы первым IP-адресом в строке ввода-вывода и IIOP.СЕТЬ успешно использовала бы этот IP-адрес.Итак, есть ли надежный способ вызвать WSAIoctl возвращать сетевые интерфейсы в другом порядке?К сожалению, я не вижу в MSDN ничего документированного по этому поводу.

Спасибо,

Дэйв

Это было полезно?

Решение

Я нашел решение, и я предоставляю ответ на случай, если кто-то еще столкнется с этим.У ACE / TAO orb есть параметр командной строки, который позволяет вам переопределять результаты, возвращаемые WSAIoctl.Параметр командной строки равен -ORBListenEndpoints и это позволяет вам предоставить список имен хостов и IP-адресов, разделенных точкой с запятой.Google -ORBListenEndpoints и вы узнаете точный синтаксис.Любые серверы, инициализированные с помощью ORB, получающие этот параметр командной строки, будут прослушивать указанную конечную точку (конечные точки).Я протестировал это, и это работает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top