我将一个套接字绑定到我的地址来监听连接。为此,我使用系统调用getaddrinfo()
获得我的地址信息,该系统调用为我提供了一种独立于ip的方式来执行我想要的操作。问题是这个系统调用返回的结构体的IP地址字段全部为空。例如:如何从一个struct addrinfo获取我自己的IP地址
struct addrinfo hints, *servinfo, *p;
int sock;
memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
getaddrinfo(NULL, port, &hints, &servinfo)
for (p = servinfo; p != NULL; p = p->ai_next)
if (p->ai_family == AF_INET6)
break;
sock = socket(p->ai_family, p->sock_type, p->protocol);
bind(sock, p->ai_addr, p->ai_addrlen)
在上面的代码中。 *p
变量应该有关于我的机器的IPv6地址的某种信息,因为绑定成功,但字段p->ai_addr->sin6_addr
(假定这将在没有投射的情况下工作)是空白的。我怎样才能确切知道我将使用什么地址?
您可能不得不在意机器是否连接到多个网络,并且您不想监听所有机器的连接。在这种情况下,您必须绑定到您想要收听的特定IP。 –
@ RemyLebeau-TeamB:在这种情况下,您应该从用户那里获得IP,并将它们提供给'node'参数中的'getaddrinfo()'。 – caf