如果需要获取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);

最佳答案

如果不使用servservlen参数,则端口号不相关。否则,它用于按端口号查找服务,例如"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/

10-11 18:16