Sockets 在多宿主主机中选择接口
当通过C中的套接字编程时,可以通过Sockets 在多宿主主机中选择接口,sockets,multihomed,Sockets,Multihomed,当通过C中的套接字编程时,可以通过getaddrinfo函数自动获取有关其接口的信息,方法是将节点调用为NULL,并在hints.AI\u flags中调用AI\u PASSIVE标志。它返回适用于bind()ing和accept()ing连接的addrinfo结构列表。在配置了默认接口的多宿主主机上,getaddrinfo将返回与默认接口相关的结构,这些结构可能不是正确的。如何调用getaddrinfo从所有可用接口返回结构,以便正确选择结构。也许您希望将节点设置为NULL。将其设置为所需接口
getaddrinfo
函数自动获取有关其接口的信息,方法是将节点调用为NULL
,并在hints.AI\u flags
中调用AI\u PASSIVE
标志。它返回适用于bind()
ing和accept()
ing连接的addrinfo
结构列表。在配置了默认接口的多宿主主机上,getaddrinfo
将返回与默认接口相关的结构,这些结构可能不是正确的。如何调用getaddrinfo
从所有可用接口返回结构,以便正确选择结构。也许您希望将节点设置为NULL。将其设置为所需接口的IP地址
socket_result = getaddrinfo(NULL, port_num_string, &hints, &sock_addr_list);
到
从手册页:
链表可能有多个addrinfo结构的原因有很多,
包括:网络主机是多主机的,可通过多个协议(例如,两者)访问
AF_INET和AF_INET6);或者可以从多种套接字类型(例如,一个SOCK_流地址和另一个SOCK_DGRAM地址)获得相同的服务
使用getifaddr手动搜索所有接口
socket_result = getaddrinfo("192.168.1.10", port_num_string, &hints, &sock_addr_list);