侧边栏壁纸
博主头像
noerror

虚灵不寐,众理具而万事出。

  • 累计撰写 239 篇文章
  • 累计创建 9 个标签
  • 累计收到 2 条评论
标签搜索

目 录CONTENT

文章目录

getipnodebyname函数用法详解

noerror
2022-11-09 / 0 评论 / 0 点赞 / 101 阅读 / 1,126 字 / 正在检测是否收录...

getipnodebyname函数用法详解

getipnodebyname函数简介

  • 头文件包含
#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 );

getipnodebyname函数常见使用错误

  • 编译错误
    warning: implicit declaration of function ‘getipnodebyname’ [-Wimplicit-function-declaration]
    解决办法:包含头文件
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>

getipnodebyname函数详细描述

这些函数已被弃用(并且在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 函数不同,这些函数返回指向动态分配内存的指针。freehostent ()函数用于在调用者不再需要hostent结构后释放动态分配的内存。getipnodebyname() arguments getipnodebyname ()函数查找由name参数指定的主机的网络地址。af参数指定下列值之一:

  • AF_INET name参数指向四分点IPv4地址或IPv4网络主机的名称。
  • AF_INET6 name参数指向十六进制IPv6地址或IPv6网络主机的名称。

flags参数指定附加选项。通过按位或对它们进行排序,可以指定多个选项。如果不需要任何选项,则应将flags设置为0。

  • AI_V4MAPPED 此标志与 AF_INET6 一起使用,请求查询IPv4地址而不是IPv6地址;IPv4地址将映射到IPv6地址。
  • AI_ALL 此标志与 AI_V4MAPPED 一起使用,请求查询IPv4和IPv6地址。找到的任何IPv4地址都将映射到IPv6地址。
  • AI_ADDRCONFIG 此标志与 AF_INET6 一起使用,进一步请求除非系统至少有一个IPv6地址分配给网络接口,否则不应查询IPv6地址,除非系统至少有一个IPv4地址分配给网络接口,否则不应查询IPv4地址。该标志可以单独使用,也可以与 AI_V4MAPPED 标志一起使用。
  • AI_DEFAULT 此标志相当于"(AI_ADDRCONFIG | AI_V4MAPPED)" getipnodebyaddr() arguments getipnodebyaddr ()函数查找其网络地址由addr参数指定的主机的名称。af参数指定下列值之一:
  • AF_INET addr参数指向struct in_addr,而len必须设置为"sizeof(struct in_addr)"
  • AF_INET6 addr参数指向struct in6_addr,而len必须设置为"sizeof(struct in6_addr)"

getipnodebyname函数返回值

如果发生错误,则返回NULL,并且error_num将包含以下列表中的错误代码:

  • HOST_NOT_FOUND 找不到主机名或网络地址。
  • NO_ADDRESS 域名服务器识别了网络地址或名称,但没有返回任何应答。如果网络主机只有IPv4地址,并且只请求IPv6信息,则会发生这种情况,反之亦然。
  • NO_RECOVERY 域名服务器返回永久失败响应。
  • TRY_AGAIN 域名服务器返回了一个临时失败响应。下次你可能会有更好的运气。

成功的查询返回指向包含以下字段的hostent结构的指针:

  • h_name这是该网络主机的正式名称。
  • h_aliases这是指向同一主机的非官方别名的指针数组。数组由空指针终止。
  • h_addrtype这是getipnodebyname ()或getipnodebyaddr ()的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这是指向网络主机网络地址结构的一个或多个指针的数组。数组由空指针终止。

getipnodebyname函数其他说明

这些函数在glibc 2.1.91-95中存在,但再次被删除。一些类似UNIX的系统支持它们,但都称它们已被弃用。

0

评论区