如何重新排序网络接口与SIO_GET_INTERFACE_LIST控制代码的WSAIoctl返回

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

  •  20-09-2019
  •  | 
  •  

有没有办法来决定由Win32的WinSock WSAIoctl功能的SIO_GET_INTERFACE_LIST功能返回的网络接口的顺序?

背景:

我们已经有了一个异构的CORBA系统,其中Windows上运行的ACE / TAO CORBA实现一个名称服务具有与其客户端使用IIOP.NET CORBA实现需要使用实现注册的,基于TAO-ACE /服务。基于IIOP.NET的客户端是一个单独的Windows机器上。的ACE / TAO机具有多个网络接口(仅其中之一是由客户端机器可访问),并且因此多个IP地址。

在IIOP.NET客户端可以连接到名称服务并检索到注册服务器CORBA对象的代理,它需要使用,但是,当它尝试使用它引发异常的代理。

根据太多的时间花在调试,我们得出的结论是,问题是,IIOP.NET只尝试连接到在CORBA IOR字符串的第一个IP地址,当问名称服务返回服务。的IOR字符串是对象的描述,包括它的IP地址(ES)。大多数CORBA客户端将尝试使用所有的地址在IOR字符串服务器对象连接,但它看起来像IIOP.NET没有做到这一点。

这产生IOR串的ACE / TAO代码使用在Winsock WSAIoctl命令与控制代码SIO_GET_INTERFACE_LIST返回的包装盒上的网络接口的列表,然后将它们都增加了IOR字符串。问题是,第一个IP地址是一个不说,IIOP客户端使用网络上,所以当IIOP.NET客户端尝试使用IP地址,显然无法连接到服务器对象,从来没有尝试使用正确的IP地址。其它CORBA客户端,如ACE / TAO不要尝试所有的IP地址和他们在这个配置下工作。

由于我不是一个网络/ CORBA的上帝,这是不现实的,我试图改变ACE / TAO或IIOP.NET,我们有充分的理由有两个,隔网在这个系统中,但如果第一次通过WSAIOCtl返回默认IP地址是客户端需要的人,这将解决这个问题,因为该IP地址将然后成为IOR字符串的第一个IP地址和IIOP.NET会成功使用该IP地址。那么,有没有一种可靠的方式来引起WSAIoctl以不同的顺序返回网络接口?我没有看到任何记录在MSDN上这个,很遗憾。

谢谢,

戴夫

有帮助吗?

解决方案

我找到了解决办法,我提供的情况下,答案谁都碰到这一点。该ACE / TAO ORB有一个命令行参数,可以让你覆盖由WSAIoctl返回的结果。命令行参数是-ORBListenEndpoints,它允许您提供主机名和IP地址的分号分隔的列表。谷歌-ORBListenEndpoints,你会发现确切的语法。任何服务器初始化为ORB接收那个命令行参数将侦听指定的端点(S)。我测试过这一点,它的工作原理。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top