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 函数

发布了70 篇原创文章 · 获赞 131 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_43239560/article/details/103056853