【问题标题】:How to Re-order the network interfaces returned by WSAIoctl with SIO_GET_INTERFACE_LIST control code如何使用 SIO_GET_INTERFACE_LIST 控制代码重新排序 WSAIoctl 返回的网络接口
【发布时间】:2009-12-16 17:55:34
【问题描述】:

有没有办法规定 Win32 WinSock WSAIoctl 函数的 SIO_GET_INTERFACE_LIST 功能返回的网络接口的顺序?

背景:

我们有一个异构 CORBA 系统,其中在 Windows 上运行 ACE/TAO CORBA 实现的名称服务具有向其注册的基于 ACE/TAO 的服务,使用 IIOP.NET CORBA 实现的客户端需要使用这些服务。基于 IIOP.NET 的客户端位于单独的 Windows 机器上。 ACE/TAO 机器有多个网络接口(客户端机器只能访问其中一个),因此有多个 IP 地址。

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

基于调试所花费的时间过多,我们得出的结论是,IIOP.NET 仅尝试连接到名称服务在要求提供名称服务时返回的 CORBA IOR 字符串中的第一个 IP 地址服务。 IOR 字符串是对象的描述,包括其 IP 地址。大多数 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 上没有看到任何记录。

谢谢,

戴夫

【问题讨论】:

    标签: winsock tao iiop


    【解决方案1】:

    我找到了解决方案,我正在提供答案,以防其他人遇到此问题。 ACE/TAO orb 有一个命令行参数,可让您覆盖WSAIoctl 返回的结果。命令行参数是-ORBListenEndpoints,它允许您提供以分号分隔的主机名和IP 地址列表。谷歌-ORBListenEndpoints 你会发现确切的语法。使用接收该命令行参数的 ORB 初始化的任何服务器都将侦听指定的端点。我已经对此进行了测试,并且可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      • 2011-08-27
      相关资源
      最近更新 更多