Comment réorganiser les interfaces réseau retournées par WSAIoctl avec le code de contrôle de SIO_GET_INTERFACE_LIST

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

  •  20-09-2019
  •  | 
  •  

Question

Est-il possible de dicter l'ordre des interfaces réseau retournées par la fonctionnalité WSAIoctl de fonction SIO_GET_INTERFACE_LIST WinSock Win32?

Arrière-plan:

Nous avons un système de CORBA hétérogène où la mise en œuvre en cours d'exécution nameservice ACE / TAO CORBA sur Windows a des services basés sur TAO ACE / enregistrés avec elle que les clients mis en œuvre en utilisant la mise en œuvre CORBA IIOP.NET besoin d'utiliser. Les clients basés IIOP.NET-sont sur une machine Windows séparée. L'ACE / TAO la machine dispose de plusieurs interfaces réseau (dont un seul est accessible par la machine de client) et donc plusieurs adresses IP.

Le client IIOP.NET peut se connecter à nameservice et récupérer un proxy à l'objet CORBA serveur enregistré qu'il a besoin d'utiliser, mais quand il essaie d'utiliser le proxy, il émet des exceptions.

D'après le débogage passé beaucoup trop de temps, nous sommes arrivés à la conclusion que le problème est que IIOP.NET tente uniquement de se connecter à la première adresse IP dans la chaîne IOR CORBA que les retours de service de nom lorsque demandé la un service. La chaîne IOR est une description de l'objet, y compris son adresse IP (es). La plupart des clients CORBA tenteront de se connecter avec l'objet serveur en utilisant toutes les adresses dans la chaîne IOR, mais il semble que IIOP.NET ne le fait pas.

Le code ACE / TAO qui génère la chaîne IOR utilise la commande WSAIoctl WinSock avec le code de contrôle SIO_GET_INTERFACE_LIST pour retourner la liste des interfaces réseau sur la boîte et les ajoute tout à la chaîne IOR. Le problème est que la première adresse IP est celle qui est pas sur le réseau que le client IIOP utilise, alors quand le client IIOP.NET essaie de se connecter à l'objet serveur en utilisant cette adresse IP échoue évidemment et essaie de ne jamais utiliser la bonne adresse IP. D'autres clients CORBA tels que ACE / TAO essaient toutes les adresses IP et ils travaillent dans cette configuration.

Depuis que je ne suis pas un dieu réseau / CORBA, ce n'est pas réaliste pour moi de tenter de changer ACE / TAO ou IIOP.NET, et nous avons de bonnes raisons d'avoir deux réseaux séparés, dans ce système, mais si le premier , l'adresse IP par défaut retourné par WSAIOCtl était celui que le client a besoin, qui résoudrait le problème depuis cette adresse IP deviendrait alors la première adresse IP dans la chaîne IOR et IIOP.NET utiliserait cette adresse IP avec succès. Alors, est-il un moyen fiable pour faire WSAIoctl pour retourner les interfaces réseau dans un ordre différent? Je ne vois rien documenté sur MSDN sur ce point, malheureusement.

Merci,

Dave

Était-ce utile?

La solution

J'ai trouvé la solution et je fournir la réponse au cas où quelqu'un d'autre vient contre cela. L'ACE / TAO orbe a un paramètre de ligne de commande qui vous permet de passer outre les résultats retournés par WSAIoctl. Le paramètre de ligne de commande est -ORBListenEndpoints et il vous permet de fournir une liste délimitée par des virgules des noms d'hôte et les adresses IP. Google -ORBListenEndpoints et vous trouverez la syntaxe exacte. Tous les serveurs initialisées avec l'ORB réception de ce paramètre de ligne de commande écoutera sur le point de terminaison spécifié (s). Je l'ai testé cela et il fonctionne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top