函数族"/>
Linux C 网络_域名转换函数族
在实际的网络应用中,常常会使用类似 “www sina. com.cn" 这样的域名替代 IP 地址来标识一个服务器,所以需要函数将域名和实际的 IP 地址进行转换。
Linux 在 netdb.h 头文件中定义了一个结构体,用于描述一个主机的相关参数,其形式如下:
struct hostent
{char *h_name;//主机的正式名称char *h_aliases;//主机的别名int h_addrype;//主机的地址类型int h_length;//主机的地址长度char **h_addr_list;//主机的IP地址列表
};
#define h_addr h_addr_list[0] //主机的第一个IP地址
域名转换函数
Linux 提供了 gethostbyname 和 gethostbyaddr 函数用于处理域名和地址的转换。
#include <netdb.h>
extern int h_errno;
struct hostent *gethostbyname(const char *name);#include <sys/socket.h>
struct hostent *gethostbyaddr(const void *addr, socklen_t len, int type);
- gethostbyname 函数用于实现域名或主机名到 IP 地址的转换,参数 hostname 指向存放域名或主机名的字符串。
- gethostbyaddr 函数用于实现 IP 地址到域名或主机名的转换,参数 addr 是一个指向含有地址结构的指针;参数 len 是此结构的大小,对于 IPv4 而言其值为4,对于 IPv6 而言其值为16,参数 family 为协议族。
- 若调用这两个函数成功,则返回一个指向 hostent 结构的指针,若调用失败则返回空指针 NULL,同时设置全局变量 h_errno 为相应的值。
h_errno 可能的取值
h_errnno | 说明 |
---|---|
HOST_NOT_FOUND | 找不到对应的主机 |
TRY_AGAIN | 出错重试 |
NO_RECOVERY | 出现了不可修复的错误 |
NO_DATA | 该名字有效,但是没有找到该记录 |
应用实例
1. 使用 gethostbyname 函数
2. 使用 gethostbyaddr 函数
更多推荐
Linux C 网络_域名转换函数族
发布评论