名称

getipnodebyname,getipnodebyaddr,freehostent-获取网络主机名和地址

说明

这些功能已弃用(在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
这是一个或多个指向网络主机网络地址结构的指针的数组。该数组以空指针终止。

语法

#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);

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

另外参见

getaddrinfo(3),getnameinfo(3),inet_ntop(3),inet_pton(3)

GETIPNODEBYNAME - Linux手册页

Linux程序员手册 第3部分
更新日期: 2017-09-15

备注

这些功能存在于glibc 2.1.91-95中,但再次被删除。几个类似UNIX的系统都支持它们,但是所有它们都已弃用。

遵循规范

RFC 2553。

日期:2019-08-20 18:00:22 来源:oir作者:oir