在多宿主主机中选择接口

时间:2011-09-20 21:55:38

标签: sockets multihomed

通过C语言中的套接字进行编程时,可以通过getaddrinfo函数自动获取有关其接口的信息,方法是将NULLAI_PASSIVE标记调用hints.ai_flags }}。它返回一个addrinfo结构列表,该列表适用于bind()accept()连接。在配置了默认接口的多宿主主机上,getaddrinfo将返回与默认接口相关的结构,这可能不是正确的接口。如何调用getaddrinfo来从所有可用接口返回结构,以便可以适当地选择结构。

1 个答案:

答案 0 :(得分: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手动搜索所有界面。