首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从struct addrinfo获取我自己的IP地址

如何从struct addrinfo获取我自己的IP地址
EN

Stack Overflow用户
提问于 2011-12-07 12:27:29
回答 2查看 1.9K关注 0票数 2

我正在将套接字绑定到我的地址以侦听连接。为此,我使用getaddrinfo()系统调用获取我的地址信息,这为我提供了一种独立于ip的方式来做我想做的事情。问题是,此syscall返回的结构的ip地址字段全部为空。例如:

代码语言:javascript
复制
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 (假设这可以在没有类型转换的情况下工作)为空。我如何才能确切地知道我将使用哪个地址?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-07 12:41:08

地址不是空的-全是零,即0::0。这是特殊的通配符地址,表示绑定到所有本地接口。

您不应该关心您的主机有什么地址-此列表可能随时更改,包括在您检查后立即更改。

一旦连接了客户端,就可以在accept()返回的套接字上使用getsockname()来确定客户端连接到哪个本地地址。

票数 4
EN

Stack Overflow用户

发布于 2011-12-07 14:17:35

如果只想监听本地连接,为什么不绑定localhost (即IPV4 127.0.0.1)或ip6-localhost (即IPV6 ::1)?

否则,请按照@caf建议的那样在地址中保留全零。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8410391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档