Como reordenar as interfaces de rede retornadas por wsaioctl com sio_get_interface_list código de controle

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

  •  20-09-2019
  •  | 
  •  

Pergunta

Existe uma maneira de ditar a ordem das interfaces de rede devolvidas pelo Win32 Winsock WSAIoctl funções SIO_GET_INTERFACE_LIST funcionalidade?

Fundo:

Temos um sistema CORBA heterogêneo em que um serviço de nome com a implementação ACE/TAO CORBA no Windows possui serviços baseados em ACE/TAO registrados com ele que os clientes implementaram usando a implementação do IIOP.NET CORBA precisa usar. Os clientes baseados em IIOP.NET estão em uma máquina Windows separada. A máquina ACE/TAO possui várias interfaces de rede (apenas uma das quais é acessível pela máquina cliente) e, portanto, vários endereços IP.

O cliente IIOP.NET pode se conectar ao serviço de nome e recuperar um proxy ao objeto CORBA do servidor registrado que ele precisa usar, mas quando tenta usar o proxy, lança exceções.

Com base em muito tempo gasto em depuração, chegamos à conclusão de que o problema é que o IIOP.NET apenas tenta se conectar ao primeiro endereço IP na sequência corba que o serviço de nome retorna quando solicitado o serviço. A string IOR é uma descrição do objeto, incluindo seus endereços IP (s). A maioria dos clientes do CORBA tentará se conectar com o objeto do servidor usando todos os endereços na sequência IOR, mas parece que o IIOP.NET não faz isso.

O código ACE/TAO que gera a string ior usa a winsock WSAIoctl comando com o código de controle SIO_GET_INTERFACE_LIST Para retornar a lista de interfaces de rede na caixa e depois as adicionar à string IOR. O problema é que o primeiro endereço IP é o que não está na rede que o cliente IIOP usa; portanto, quando o cliente iiop.net tenta se conectar ao objeto do servidor usando esse endereço IP, ele obviamente falha e nunca tenta usar o Endereço IP correto. Outros clientes do CORBA, como ACE/TAO, tentam todos os endereços IP e funcionam nessa configuração.

Como não sou um deus de rede/corba, não é realista para eu tentar mudar ACE/TAO ou IIOP.NET, e temos boas razões para ter duas redes separadas neste sistema, mas se o primeiro, o IP padrão padrão endereço retornado por WSAIOCtl Se o cliente precise, que resolveria o problema, pois esse endereço IP se tornaria o primeiro endereço IP na String IOR e o IIOP.NET usaria esse endereço IP com sucesso. Então, existe uma maneira confiável de causar WSAIoctl Para devolver as interfaces de rede em uma ordem diferente? Não vejo nada documentado no MSDN sobre isso, infelizmente.

Obrigado,

Dave

Foi útil?

Solução

Encontrei a solução e estou fornecendo a resposta caso qualquer outra pessoa enfrente isso. O Orb ACE/TAO possui um parâmetro de linha de comando que permite substituir os resultados retornados por WSAIoctl. O parâmetro da linha de comando é -ORBListenEndpoints E permite que você forneça uma lista de nomes de hosts e endereços IPs. Google -ORBListenEndpoints E você descobrirá a sintaxe exata. Quaisquer servidores inicializados com o ORB que recebem esse parâmetro de linha de comando ouvirá no (s) ponto (s) especificado (s). Eu testei isso e funciona.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top