域名解析gethostbyname函数

📅 发布时间:2026/7/10 3:13:25 👁️ 浏览次数:
域名解析gethostbyname函数
用于将域名 / 主机名解析为对应的网络 IP 地址函数原型#includenetdb.h#includesys/socket.h// 依赖套接字相关头文件structhostent{char*h_name;/* 官方域名 */char**h_aliases;/* 别名*/inth_addrtype;/* 地址族地址类型 */inth_length;/* 地址长度 */char**h_addr_list;/* 地址列表 */}#defineh_addrh_addr_list[0]/* 实现向后兼容性 */structhostent*gethostbyname(constchar*name);参数参数名类型含义与使用说明nameconst char *待解析的域名 / 主机名字符串1. 可传入域名如www.baidu.com、本地主机名如localhost2. 若传入 NULL / 空字符串默认解析本机主机名3.const修饰表示入参内容不可被函数修改。返回值成功返回 struct hostent 类型的非空指针指向存储域名解析结果的主机信息结构体结构体成员对应解析后的主机各类信息核心成员如下成员名含义与特性h_name主机的正式名称官方域名h_aliases主机的备用名称数组以NULL结尾的指针可存储主机的多个别名域名h_addrtype主机的地址类型取值为AF_INETIPv4或AF_INET6IPv6标识地址协议类型h_length主机网络地址的长度单位为字节如 IPv4 地址长度为 4 字节h_addr_list指向主机网络地址的指针数组地址按网络字节顺序存储数组以NULL指针终止h_addr为兼容旧版本设计等价于h_addr_list中的第一个网络地址- 失败返回 NULL空指针且不会设置errno需通过 全局变量h_errno获取错误码再调用hstrerror(h_errno)将错误码转为易读的错误信息需包含string.h常见h_errno错误码 * HOST_NOT_FOUND指定的域名 / 主机名不存在 * TRY_AGAIN域名服务器暂时不可用建议重试 * NO_RECOVERY域名解析发生不可恢复的错误 * NO_DATA主机名存在但无对应的 IP 地址如仅有别名无实际 IPdemo#includestdio.h#includenetdb.h#includesys/socket.h#includestdlib.h#includearpa/inet.hintmain(intargc,char*argv[]){inti;if(argc2){printf(%s host name\n,argv[0]);exit(0);}structhostent*hostgethostbyname(argv[1]);for(i0;host-h_aliases[i]!NULL;i){printf(%s\n,host-h_aliases[i]);}printf(Address type:%s\n,host-h_addrtypeAF_INET?AF_INET:AF_INET6);for(i0;host-h_addr_list[i]!NULL;i){printf(IP address %d:%s\n,i,inet_ntoa(*(structin_addr*)host-h_addr_list[i]));}endhostent();return0;}