GETIPNODEBYNAME - Linux手册页
Linux程序员手册 第3部分
更新日期: 2017-09-15
名称
getipnodebyname,getipnodebyaddr,freehostent-获取网络主机名和地址
语法
#include <sys/types.h> #include <sys/socket.h> #include <netdb.h> struct hostent *getipnodebyname(const char *name, int af, int flags, int *error_num); struct hostent *getipnodebyaddr(const void *addr, size_t len, int af, int *error_num); void freehostent(struct hostent *ip);
说明
这些功能已弃用(在glibc中不可用)。请改用getaddrinfo(3)和getnameinfo(3)。
getipnodebyname()和getipnodebyaddr()函数返回网络主机的名称和地址。这些函数返回一个指向以下结构的指针:
struct hostent { char *h_name; char **h_aliases; int h_addrtype; int h_length; char **h_addr_list; };
这些函数代替了只能访问IPv4网络地址族的gethostbyname(3)和gethostbyaddr(3)函数。 getipnodebyname()和getipnodebyaddr()函数可以访问多个网络地址系列。
与gethostby函数不同,这些函数将指针返回到动态分配的内存。在调用方不再需要hostent结构之后,可以使用freehostent()函数释放动态分配的内存。
getipnodebyname() arguments
getipnodebyname()函数查找由name参数指定的主机的网络地址。 af参数指定以下值之一:
- AF_INET
- name参数指向点分四进制的IPv4地址或IPv4网络主机的名称。
- AF_INET6
- name参数指向十六进制IPv6地址或IPv6网络主机的名称。
flags参数指定其他选项。可以通过按位或将它们一起指定多个选项。如果不需要选项,则应将标志设置为0。
- AI_V4MAPPED
- 该标志与AF_INET6一起使用,以请求查询IPv4地址而不是IPv6地址。 IPv4地址将被映射到IPv6地址。
- AI_ALL
- 该标志与AI_V4MAPPED一起用于请求对IPv4和IPv6地址的查询。找到的任何IPv4地址都将映射到IPv6地址。
- AI_ADDRCONFIG
- 该标志与AF_INET6一起使用,以进一步请求除非对系统分配了至少一个IPv6地址,否则不应该查询IPv6地址,除非系统至少对一个IPv6地址进行查询,否则不应该查询IPv4地址。分配给网络接口的IPv4地址。该标志可以单独使用,也可以与AI_V4MAPPED标志一起使用。
- AI_DEFAULT
- 此标志等效于(AI_ADDRCONFIG | AI_V4MAPPED)。
getipnodebyaddr() arguments
getipnodebyaddr()函数查找其网络地址由addr参数指定的主机的名称。 af参数指定以下值之一:
- AF_INET
- addr参数指向结构in_addr,并且len必须设置为sizeof(struct in_addr)。
- AF_INET6
- addr参数指向结构in6_addr,并且len必须设置为sizeof(struct in6_addr)。
返回值
如果发生错误,则返回NULL,并且error_num将包含以下列表中的错误代码:
- HOST_NOT_FOUND
- 找不到主机名或网络地址。
- NO_ADDRESS
- 域名服务器识别出网络地址或名称,但未返回任何答案。如果网络主机仅具有IPv4地址,并且仅请求提供IPv6信息,则可能发生这种情况,反之亦然。
- NO_RECOVERY
- 域名服务器返回了永久失败响应。
- TRY_AGAIN
- 域名服务器返回了临时失败响应。下次您可能会比较幸运。
成功的查询返回指向包含以下字段的宿主结构的指针:
- h_name
- 这是此网络主机的正式名称。
- h_aliases
- 这是指向同一主机的非官方别名的指针数组。该数组以空指针终止。
- h_addrtype
- 这是getipnodebyname()或getipnodebybyaddr()的af参数的副本。如果af参数为AF_INET,则h_addrtype将始终为AF_INET。如果af参数为AF_INET6,则h_addrtype将始终为AF_INET6。
- h_length
- 如果h_addrtype为AF_INET,则此字段将设置为sizeof(struct in_addr);如果h_addrtype为AF_INET6,则将该字段设置为sizeof(struct in6_addr)。
- h_addr_list
- 这是一个或多个指向网络主机网络地址结构的指针的数组。该数组以空指针终止。
遵循规范
RFC 2553。
备注
这些功能存在于glibc 2.1.91-95中,但再次被删除。几个类似UNIX的系统都支持它们,但是所有它们都已弃用。
另外参见
getaddrinfo(3),getnameinfo(3),inet_ntop(3),inet_pton(3)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。