如果需要获取IP的主机名,应该使用哪个端口?getnameinfo()从哪里获取主机名?
struct sockaddr_in sa;
sa.sin_family = AF_INET;
sa.sin_port = htons(?); // which port ?
inet_pton(AF_INET, "x.x.x.x", &(sa.sin_addr));
char host[NI_MAXHOST];
getnameinfo((struct sockaddr *)&sa, sizeof(sa), host, NI_MAXHOST, NULL, 0, NI_NAMEREQD);
puts(host);
最佳答案
如果不使用serv
和servlen
参数,则端口号不相关。否则,它用于按端口号查找服务,例如"ssh"
表示端口22,"smtp"
表示端口25等(有关更多信息,请参见/etc/services
)。getnameinfo()
可以从多个位置获取主机名(使用nsswitch.conf
,可以为不同类型的名称解析启用杂项libnss
模块)。在典型的桌面linux发行版上,我希望它首先查看/etc/hosts
,然后根据/etc/resolv.conf
查询dns服务器。
关于c++ - sockaddr_in中的sin_port,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14759415/