【问题标题】:Choosing the interface in multi-homed hosts在多宿主主机中选择接口
【发布时间】:2011-09-20 21:55:37
【问题描述】:

在 C 中通过套接字编程时,可以通过 getaddrinfo 函数自动获取有关其接口的信息,方法是使用节点为 NULL 和 hints.ai_flags 中的 AI_PASSIVE 标志调用它。它返回适合bind()ing 和accept()ing 连接的addrinfo 结构列表。在配置了默认接口的多宿主主机上,getaddrinfo 将返回与可能不正确的默认接口相关的结构。如何调用 getaddrinfo 以从所有可用接口返回结构,以便可以适当地选择一个。

【问题讨论】:

    标签: sockets multihomed


    【解决方案1】:

    也许您想将节点设置为 NULL。设置成你想要的接口的IP地址。

    socket_result = getaddrinfo(NULL, port_num_string, &hints, &sock_addr_list);
    

    到

    socket_result = getaddrinfo("192.168.1.10", port_num_string, &hints, &sock_addr_list);
    

    来自手册页:

    链表可能具有多个 addrinfo 结构的原因有多种, 包括:网络主机是多宿主的,可通过多种协议访问(例如 AF_INET 和 AF_INET6);或者可以从多种套接字类型(例如,一个 SOCK_STREAM 地址和另一个 SOCK_DGRAM 地址)获得相同的服务。

    使用 getifaddr 手动搜索所有接口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 2019-02-21
      • 2014-11-26
      相关资源
      最近更新 更多