代码之家  ›  专栏  ›  技术社区  ›  David Gladfelter

如何重新排序wsaioctl返回的网络接口以及sio获取接口列表控制代码

  •  1
  • David Gladfelter  · 技术社区  · 15 年前

    有没有办法规定由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客户端可以连接到NameService并检索到它需要使用的注册服务器CORBA对象的代理,但是当它尝试使用代理时,它会抛出异常。

    基于花在调试上的时间太长,我们得出的结论是,问题在于iiop.net只尝试连接到名称服务在请求服务时返回的corba ior字符串中的第一个IP地址。IOR字符串是对对象的描述,包括其IP地址。大多数CORBA客户机将尝试使用IOR字符串中的所有地址与服务器对象连接,但看起来iiop.net并没有这样做。

    生成IOR字符串的ace/tao代码使用winsock WSAIOCTL 带控制代码的命令 SIO获取接口列表 返回框中的网络接口列表,然后将它们全部添加到IOR字符串中。问题是,第一个IP地址不在iiop客户端使用的网络上,因此当iiop.net客户端尝试使用该IP地址连接到服务器对象时,它显然会失败,并且从不尝试使用正确的IP地址。其他CORBA客户机(如ace/tao)会尝试所有IP地址,并在此配置中工作。

    因为我不是一个网络/corba上帝,所以尝试改变ace/tao或iiop.net是不现实的,我们有充分的理由在这个系统中有两个独立的网络,但是如果第一个,默认IP地址返回 WSAIOCtl 如果是客户机需要的地址,这将解决问题,因为该IP地址将成为IOR字符串中的第一个IP地址,iiop.net将成功使用该IP地址。那么,是否有可靠的方法 WSAIOCTL 以不同的顺序返回网络接口?不幸的是,我没有看到有关这方面的任何文档。

    谢谢,

    戴夫

    1 回复  |  直到 15 年前
        1
  •  1
  •   David Gladfelter    15 年前

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

    推荐文章