Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 在多宿主主机中选择接口_Sockets_Multihomed - Fatal编程技术网

Sockets 在多宿主主机中选择接口

Sockets 在多宿主主机中选择接口,sockets,multihomed,Sockets,Multihomed,当通过C中的套接字编程时,可以通过getaddrinfo函数自动获取有关其接口的信息,方法是将节点调用为NULL,并在hints.AI\u flags中调用AI\u PASSIVE标志。它返回适用于bind()ing和accept()ing连接的addrinfo结构列表。在配置了默认接口的多宿主主机上,getaddrinfo将返回与默认接口相关的结构,这些结构可能不是正确的。如何调用getaddrinfo从所有可用接口返回结构,以便正确选择结构。也许您希望将节点设置为NULL。将其设置为所需接口

当通过C中的套接字编程时,可以通过
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);