选择多宿主主机中的接口



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

也许你想将节点设置为 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 手动搜索所有接口。

最新更新